Forum: Compiler & IDEs LCD zeigt in Timer interrupt nichts an


von Paul P. (cesupa)


Lesenswert?

Hallo,

ich versuche gerade eine geregelte Gewächshausheizung zu bauen. Dabei 
wird je nach Temperatur ein Heizelement gesteuert. Desweiteren soll die 
Temperatur und der Zustand der Heizung (An/Aus) über ein LCD angezeigt.

Die Temperatur wird testweise alle 10sek in einem Timerinterrupt 
angezeigt. Komischerweise sehe ich rein gar nichts. Nur die schwarzen 
Balken verschwinden.

Ich habe die Funktionen aus dem LCD-GCC-Tutorial benutzt und wie 
angegeben an einen Atmega8 (16MHz) angeschlossen. Der 8bit-Timer löst 
einen overflow alle 10,25ms aus.

Das LCD funktioniert. Wenn ich mir in einer whileschleife die 
Anzeigefunktion aufrufe sehe ich es auch auf dem LCD. Der Timer 
funktioniert auch laut LED-Blink-Test. Nur wenn ich versuche mir aus dem 
Interrupt heraus Zeichen auf dem LCD anzeigen zu lassen, sehe ich rein 
gar nichts. Woran könnte das liegen?

Gruß
Paul

von AchJe (Gast)


Lesenswert?


von Paul P. (cesupa)


Lesenswert?

Dann schieb ich mal code hinterher:
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <stdlib.h>
4
#include <util/delay.h>
5
6
#include "lcd_addonboard.h"
7
8
volatile uint16_t z=0;
9
volatile unsigned char check;
10
11
void init();
12
void setLCD();
13
14
int main()
15
{
16
  check=2;  
17
  init();
18
  
19
  while(1)
20
  {
21
    if(check==1)
22
    {
23
      setLCD();
24
      check=0;
25
    }
26
  }  
27
}
28
29
void init()
30
{
31
  TCCR0|=(1<<CS02)|(1<<CS00);  //prescaler 1024
32
  TCNT0=156;          //every 10ms
33
  TIMSK|=(1<<TOIE0);
34
  lcd_init();
35
  sei();
36
}
37
38
ISR(TIMER0_OVF_vect)
39
{
40
  if(z==500)    //10sek
41
  {
42
    check=1;
43
    z=0;
44
  }
45
  z++;
46
  TCNT0=156;
47
}
48
49
void setLCD()
50
{
51
  lcd_data('T');
52
}

So, wenn ich das jetzt ablaufen lasse, müsste ja alle 10sek ein weiteres 
'T' auf dem LCD erscheinen. Nur erscheint nichts. Aber diese schwarzen 
Balken verschwinden. Zum compilen nutze ich eclipse mit AVR-plugin. Das 
ganze läuft über einen Atmega8 16MHz und nem einfachen zweizeilen LCD 
von Pollin.

Gruß
Paul

von Karl H. (kbuchegg)


Lesenswert?

> Das ganze läuft über einen Atmega8 16MHz und nem
> einfachen zweizeilen LCD

Hast du kontrolliert, ob dein µC auch wirklich mit 16Mhz läuft?

Mit der Default-Einstellung des Prozessors (1Mhz) dauert es nämlich rund 
1 Minute, bis das erste T erscheinen würde.

Schraub doch mal den Vergelichswert für z etwas runter. Sagen wir auf 5, 
anstelle von 500.

von Paul P. (cesupa)


Lesenswert?

aaaaargh......jop....das kommt davon wenn man stundenlang arbeitet und 
dann den Wald vor lauter Bäumen nicht mehr sieht....ich hatte vergessen 
einen Quarz auf mein Versuchssteckbrett mit draufzubauen :D
Deswegen hats auf dem Pollinboard einwandfrei geklappt und auf meinem 
Steckbrett nicht. Naja....

Danke für eure Hilfe.

Schöne Grüße
Paul

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.