Arduino Timer data logger [ÇÖZÜLDÜ]
Arduino ile bir data logger yapacağım ama ne yaptım ne ettim timer ile yapamadım tasarımı için sabit süre aralıklarında Analog
A0 girişine bağlı sensörden verileri okuyan ve Seri port aracılığıyla gönderen program yazacağım sabit süre aralıklarından kasıt 500ms lik periyod Yani Analog A0 girişine bağlı olan sensörden gelen
veriler, 500ms değerine kurulan TİMER süresi aralıklarında okunacaktır Veri okunduğunu görsel olarak
anlamak için PB0 (8.pin) pinine LED bağlanıp flaş yaptırıcam yazdığım kod şu şekilde ama çalıştıramaıdm A0 pinine bir pot bağladığımızı düşünürsek kodu şu şekilde yazdım
OLUR BAŞKASININ İŞİNE YARAR DİYE BURAYA KODU BIRAKIYORUM YAPTIM UMARIM HERKESİN İŞİNE YARAR
Bağlantı şekli :

Arduino ile bir data logger yapacağım ama ne yaptım ne ettim timer ile yapamadım tasarımı için sabit süre aralıklarında Analog
A0 girişine bağlı sensörden verileri okuyan ve Seri port aracılığıyla gönderen program yazacağım sabit süre aralıklarından kasıt 500ms lik periyod Yani Analog A0 girişine bağlı olan sensörden gelen
veriler, 500ms değerine kurulan TİMER süresi aralıklarında okunacaktır Veri okunduğunu görsel olarak
anlamak için PB0 (8.pin) pinine LED bağlanıp flaş yaptırıcam yazdığım kod şu şekilde ama çalıştıramaıdm A0 pinine bir pot bağladığımızı düşünürsek kodu şu şekilde yazdım
Kod:
int sensor_veri;
int sensor=A0;
int durum;
const int led=8;
**** setup() {
Serial.begin(9600); pinMode(8,OUTPUT);
cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 62499;
TCCR1B |= (1 << WGM12);
TCCR1B |= (1 << CS12) | (0 << CS11) | (0 << CS10);
TIMSK1 |= (1 << OCIE1A);
sei();
}
**** loop() {
sensor_veri = analogRead(A0);
Serial.println(sensor_veri);
}
ISR (TIMER1_CAMPA_vect)
{
if(durum)
{
digitalWrite(led,1);
durum = false;
}
else
{
digitalWrite(led,0);
durum = true;
}
}
SİZCE SORUN NEREDE
OLUR BAŞKASININ İŞİNE YARAR DİYE BURAYA KODU BIRAKIYORUM YAPTIM UMARIM HERKESİN İŞİNE YARAR
Kod:
// T1N=0.5*16Mhz/65536 65536 nın sebebi timer 1 den geliyor
// T1N=122,07
// Bölme oranı için kendinden bir sonraki büyük değeri seçiyorum 122.07----->256
// OCR1A= [16Mhz/(2*256)]-1 = burdaki 2 500 ms den gelir formül olarak 1/t den hesaplarız 1/0,5=2Hz yapar
// OCR1A nın değeri =31249
int durum=0; //Led için gerekli olan durum
int analog_deger=0; // Okuyacağım değer
int lm35=A0; // sensörün bağlı olduğu pin
**** setup(){
Serial.begin(9600); // Seri Port Ekranını açıyorum
Serial.print("KEMAL ERKAN GUNES"); //Adımı 1 kere ekranda yazdırıyorum
SREG = 0x80; // Bütün kesmelere izin verildi açılımı 0b1000 0000 INT bitinin 1 olması gerektiğinden bu kodu yazıyorum
TCCR1A=0; // Reg leri sıfırlıyoruz sebebi eski programdan kalan bir sorun olmasın ki program yanılmasın
TCCR1B=0; // Reg leri sıfırlıyoruz sebebi eski programdan kalan bir sorun olmasın ki program yanılmasın
TCNT1=0; // Reg leri sıfırlıyoruz sebebi eski programdan kalan bir sorun olmasın ki program yanılmasın
OCR1A=31249; // Yukarıda hesapladığım değer ms için gerekli olan OCR1A değeri (SAYAÇ DEĞERİ)
TCCR1B |= (1<<WGM12)|(1<<CS12)|(0<<CS11)|(0<<CS10); //WGM12 Yİ aktif ettim CTC için cs11 ve cs10 bitini 0 verdim bölme oranımın 256 olabilmesi için
TIMSK1 |=(1<<OCIE1A);//Kıyaslama yaptırıp kesmeye götürüyorum aslında kesme aktifleştiriyorum
pinMode(8,OUTPUT); // Ledin analog bilgisni okuyabilmek için flashor yaptıracağım led
}
**** loop()// Bu kısım sonsuz döngü fakat benim ödevimde sadece kesmede işlem yapılacağı için bu kısmı boş geeçiyorum.
{
}
ISR(TIMER1_COMPA_vect)// Timer 1 kesmesinin döngüsü kesmeye girildiğinde ne yapılacağını yazdığımız yer bu kısımdır
{
durum=!durum; //durumun değilini aldım durumun içine atadım
digitalWrite(8,durum); // değilini aldığın durumu da 8 no lu pinde gösterdim
analog_deger=analogRead(A0); // A0 Pininden okduğum değeri analog_deger adlı değişkene atadım
Serial.println(analog_deger); // ve Seri ekrana analog_deger i yazdırdım
}
Bağlantı şekli :

Son düzenleme:
