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
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
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.