Forum: Mikrocontroller und Digitale Elektronik LCD Display funktioniert bei Zusammenstellung nicht


von F. S. (de0_board)


Angehängte Dateien:

Lesenswert?

Liebe Forumuser,


ich tue mich gerade schwer mit dem LCD Display TC1602-01 von Pollin und 
ich beutzes es auf dem Atmel Addon Board in Kombination mit dem 
Evaluationsboard.

Ich benutze die übliche Bibliothek von Peter Fleury, wofür ich sehr 
dankbar bin das es das gibt.

Ich habe das Menü für das Display schon geschrieben und getestet. Nun 
ist es so, dass ich einen PI Regler implementiert habe dessen 
Regelparameter über die Tasten des Addon Boards die am PORTB hängen 
eingegeben werden können.

Wenn ich aber das LCD Programm mit meinem Reglerprogramm kombiniere 
funktioniert gar nichts mehr. Manchmal zeigt es nur schwarze Kästchen 
und manchmal gar nichts.

Ich habe die Datei mit dem LCD Menü auch angehängt, und auch die Regler 
Datei wie die kombinierte Datei aus beiden. Auch in der kombinierten 
Datei funktioniert der Regler, aber leider eben wie beschrieben die LCD 
Menüs nicht :(

Ich weiß nicht was ich falsch mache. Ich probiere schon die ganze Zeit 
herum, ob das vielleicht mit den Zeitverzögerungen zusammenhängt, mit 
den Interrupts, oder sonst was…

Als Bsp:

Diesesn Code habe ich in der lcd.c genauso verwendet und ich sehe wie 
üblich ein Hallo zu Beginn des Programs.

Aus der "lcd.c":
1
    /* Initialisiere Display, Cursor aus */
2
    lcd_init(LCD_DISP_ON);
3
4
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */
5
    lcd_clrscr();
6
7
    USART_Init(103);
8
9
    lcd_puts("Hallo");

Wenn ich das aber in die Regler Datei einsetzen will, sehe ich auf 
einmal gar nichts mehr.
Aus der "regler_sensor_lcd.c"
1
    USART_Init(103);
2
3
    rs232_printf("Test 1\n");
4
    rs232_printf("Reset: %d\n", OWReset());
5
    rs232_printf("Test 2\n\n");
6
7
    /* Initialisiere Display, Cursor aus */
8
    lcd_init(LCD_DISP_ON);
9
10
    /* loesche das LCD Display und Cursor auf 1 Zeile, 1 Spalte */
11
    lcd_clrscr();
12
13
    lcd_puts("Hallo man!\n");
14
15
    sei();            //Global Interrupt enable aktivieren

Ich schließe einen Sensor an das Board an der die Temperatur über 1-wire 
schickt. Diese Bibliothek habe ich vom Herrn Peter Danegger übernommen 
und sie funktioniert auch.

ich weiß nicht warum das nicht mehr geht...

Ich hoffe auf Hilfe und danke schon im voraus.


lg F.S.

von Georg G. (df2au)


Lesenswert?

Du machst reichlich Ausgaben über den UART ehe du die Interrupts 
freigibst. Wenn dadurch der Ringbuffer gefüllt wird, wartet das Programm 
bis zum Jüngsten Gericht.

Du solltest uns auch verraten, an welche Ports du was angeschlossen 
hast. Die Header Files sind auch interessant. Nicht, dass es da 
konkurrierende Zuweisungen zu den DDRs gibt.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Zum einen: Ich würde dir empfehlen, Register in einem 'Schwupps' zu 
beschreiben, um unliebsame Zwischenzustände zu vermeiden. Ein Beispiel:
1
   TCCR0|=(1<<CS02);
2
    TCCR0|=(0<<CS01);
3
    TCCR0|=(1<<CS00);
Schon beim ersten Statement läuft der Timer los, dann setzt du im 
laufenden Betrieb weitere Prescalerbits - das liefert dir ungewollte 
Ergebnisse.
Das gilt natürlich in verstärktem Maße fürs Setzen der Moderegister. 
Mach das lieber so:
1
TCCR0 = (1<<CS02)|(0<<CS01)|(1<<CS00) ; // Füge noch die anderen Bits für TCCR0 zu
Zum LCD Problem. Für meinen Frequenzumrichter musste ich die lcd.h von 
Peter Fleury auch modifizieren, damit es keine Konflikte zwischen den OC 
Ausgänge und den LCD Leitungen gibt. Leider hast du genau die lcd.h 
nicht angehangen, so das ich vermute, das dort der Hase im Pfeffer 
liegt.
Schau dir die lcd.h bei mir mal an, dort werden Daten und 
Steuerleitungen auf 2 verschiedene Ports verteilt:
http://www.mikrocontroller.net/articles/3-Phasen_Frequenzumrichter_mit_AVR

Und ja, auch hier ist ein PID Regler mit einstellbaren Parametern 
implementiert.

von F. S. (de0_board)


Lesenswert?

Danke euch beiden, ich danke euch herzlichst für eure Zeit und eure 
Mühe.
Ja ihr hattet Recht, ich hab einen Fehler in der lcd.h gemacht was mir 
das ganze kaputt gemacht hat. Ich habe ihn nun behoben und es 
funktioniert wieder.

Ich hoffe euch keine Zeit verschwendet zu haben und wünsche euch noch 
einen schönen Tag :)


lg F.S.

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.