longa değişkeninin tipi ne?
Benim düzen yine değişti.O zaman kısa süreli denemelerde sorun çıkmasa da sonradan mutlaka sorun çıkar. Atmega dahili SRAM 8 bit. Bu durumda kesme, 32 bitlik bir değişken üzerinde işlem yaparken ana döngüde sen bu değişkeni okursan, o değişkeni tam işlemin ortasında yakalayabilirsin ve saçma sapan bir değer okursun.
Onun yerine kesme doğrudan saat, dakika, saniye, ve salise değişkenlerini arttırsın ve bu değişkenlerin her birisi byte olsun. Bir byte okuyorken yarım yamalak birşey okuma riski yoktur.
byte ms = 0;
byte sn = 0;
byte dk = 0;
byte st = 0;
ISR(TIMER1_COMPA_vect) {
ms++;
if(ms == 100){
sn++;
ms = 0;
}
devamı aynı mantıkta sıra sıra arttırcam
}
Benim düzen yine değişti.
Zaman kesme içinde şöyle yapıcam o zaman.
Kod:byte ms = 0; byte sn = 0; byte dk = 0; byte st = 0; ISR(TIMER1_COMPA_vect) { ms++; if(ms == 100){ sn++; ms = 0; } devamı aynı mantıkta sıra sıra arttırcam }
kafam karışmasın diye öyle yazıyorum abi.Yalnız ms değişken ismi yanlış. o değişken milisaniye saymıyor, 10 ms sayiyor._10ms_counter
falan demek daha mantıklı.
/*
___ _ _ _ __ _ __ ___ _ __| |_ ___ _ __ ___ _
/ __| | | | '_ \| '_ \ / _ \| '__| __/ _ \ '__/ __(_)
\__ \ |_| | |_) | |_) | (_) | | | || __/ | \__ \_
|___/\__,_| .__/| .__/ \___/|_| \__\___|_| |___(_)
|_| |_|
_ _
(_) |
___ ___ _ __ ___ _| |__ ___
/ __|/ _ \ '_ ` _ \| | '_ \ / __|
\__ \ __/ | | | | | | | | | \__ \
|___/\___|_| |_| |_|_|_| |_| |___/
______
|______|
_ _ _
| | | (_)
| |_ __ _ _ _ __| |_ _ __
| __/ _` | | | |/ _` | | '_ \
| || (_| | |_| | (_| | | | | |
\__\__,_|\__, |\__,_|_|_| |_|
__/ |
|___/
__ _ _
/ _(_) | |
| |_ _ __| | ___
| _| |/ _` |/ _ \
| | | | (_| | __/
|_| |_|\__,_|\___|
*/
byte _10ms = 0;
byte sn = 0;
byte dk = 0;
byte sa = 0;
ISR(TIMER1_COMPA_vect) {
_10ms++;
if (_10ms == 100) {
sn++;
_10ms = 0;
}
if (sn == 60) {
dk++;
sn = 0;
}
if (dk == 60) {
sa++;
dk = 0;
}
}
void setup() {
/*
noInterrupts();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 20102;
TCCR1B |= (1 << WGM12);
// TCCR1B |= (1 << CS12); // prscl 256
TCCR1B |= (1 << CS11); // prscl 8
TIMSK1 |= (1 << OCIE1A);
interrupts();
*/
noInterrupts();
TCCR1A = 0;
TCNT1 = 0;
OCR1A = 16000000 / (100 * 64) - 1;
TCCR1B = (1 << WGM12) | (1 << CS11) | (1 << CS10);
TIMSK1 |= (1 << OCIE1A);
interrupts();
Serial.begin(115200);
}
void loop() {
Serial.print(_10ms);
Serial.print("--");
Serial.print(sn);
Serial.print("--");
Serial.print(dk);
Serial.println(" ");
}
Dolgu değil abi diş teli.Dişlerde dolgu için gümüş mü kullanılıyor yav? Gümüş korozyon yapan bir metal nasıl oluyor o iş?
kronometre tarafında o kadar saat saydırmam ama ekleyeyim nizama uygun olsun.Saatin 100 olma durumunu da kontrol edip başa döndürürsen daha doğru olur Ahmet.
uln2803 arıyorum abi 20 tane vardı.Gene ıvır zıvır özelliklere odaklanmaya başladın Ahmet Asıl ekran taramasına odaklan, orada tuzaklar var.
Aslında girişlerimiz çıkışlarımız belli.Eğer pinler başka birşey için lazımsa 595 kullan. Doğrudan porta yazma ile 595 kullanma arasında hem zorluk olarak bir fark yok hem de bir püf noktası da yok.