mikrocontroller.net

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


Autor: Paul P. (cesupa)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: AchJe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Paul P. (cesupa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann schieb ich mal code hinterher:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <util/delay.h>

#include "lcd_addonboard.h"

volatile uint16_t z=0;
volatile unsigned char check;

void init();
void setLCD();

int main()
{
  check=2;  
  init();
  
  while(1)
  {
    if(check==1)
    {
      setLCD();
      check=0;
    }
  }  
}

void init()
{
  TCCR0|=(1<<CS02)|(1<<CS00);  //prescaler 1024
  TCNT0=156;          //every 10ms
  TIMSK|=(1<<TOIE0);
  lcd_init();
  sei();
}

ISR(TIMER0_OVF_vect)
{
  if(z==500)    //10sek
  {
    check=1;
    z=0;
  }
  z++;
  TCNT0=156;
}

void setLCD()
{
  lcd_data('T');
}

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Paul P. (cesupa)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.