Wer kann mir helfen. Ein Atmega 32, ein LCD 2x16 und ein SD Karten
Modul.
Ich habe den Beispiel Quellcode aus dem Buch "AVR Hardware und
Programmierung in C" sd-karte.c für ein Projekt verwendet.
Ich zeichne die Temperatur mit Zeit und Datum auf je Stunde. Mit einen
Taster kann ich die Aufzeichnung stoppen und die Karte im Programm
wechseln.
Die Aufzeichnung funktioniert sehr gut alles OK.
Weiter habe ich ein umfangreiches Programm mit Ausgabe und Untermenüs
auf einen 2x16 LCD für Temperatur-Max -Min Datum- Zeit-
Batteriespannungsanzeige....und Auswertungen ....mit einen Programmteil
zur Einstellung der des Datums und der Uhr erstellt. Alles funktioniert
sehr gut.
Mein Problem ich schaffe es nicht die beiden Programme zusammenzuführen.
Die SD Karten Aufzeichnung funktioniert störungsfrei aber das LCD geht
nicht es zeigt sinnlose Zeichen an nach der Initialisierung der SD Karte
und ist nicht mehr ansprechbar.
Hier der C Code. Ich habe ein einfaches Beispiel erzeugt zur
Demonstration.
Die erste Zeile Datensatz 1 wird fehlerfrei angezeigt. Nach der
Programmstelle timer0_init(); Geht das LCD noch richtig und gibt
fehlerfrei die zweite Zeile aus.
Nach dem nächsten Programmschritt uinit();// uart config ist Schluss
danach geht es nicht mehr. Aber wie gesagt die Aufzeichnung auf die SD
Karte funktioniert fehlerfrei.
Mein erster Verdacht war die Variable str[20] im C Code SD Karte und die
gleiche Variable str[5] im C Code des LCD, aber nach der Änderung str[5]
in strl[5] für das LCD ist der Fehler nicht behoben.
Ich denke es ist ein Zeiger Konflikt? Im C Code und den Bibliotheken der
SD Karte sind viele static Variablen und in der #include
<util/LCD_display_free_int_pins.h> für das LCD keine static?
Vielen Dank , Ich bin noch Anfänger zwei dicke Bücher habe ich schon
gelesen aber hier komme ich nicht weiter.
hier der C code Beispiel und die #include
<util/LCD_display_free_int_pins.h>
und #include "uart.h" und uart.c
Hallo ich selbst noch mal,
Ich habe weiter getestet und einfach uinit() ausgeschaltet mit
//uinit() // uart config. und jetzt läuft alles bis zum Programmende
richtig ab. Die Anzeige macht alles richtig und die Aufzeichnung auf die
SD Karte funktioniert. Am Programmende sind die Daten auf der SD Karte
und in der 2. Zeile des LCD steht richtig Datensatz 10, so wie es sein
soll.
Die Funktion uinit() // uart config hat die LCD Anzeige gestört. Wer
kann mir das Beantworten warum und wozu ist die Funktion uinit() // uart
config notwendig? Gibt die Funktion uinit() // uart config Signale an
den Ports D aus
wo das LCD angeschlossen ist?
Holger Weiß
Hier die Funktion void uinit (void)
Was Stört hier das LCD? und warum funktioniert die SD Karten
Aufzeichnung auch ohne die Funktion? Bitte um Hilfe ..Danke.
Hier die Funktion void uinit (void)
Na ja, es ist schon unpraktisch Port D als LCD-Port zu verwenden, wenn
dort der U(S)ART beheimatet ist und man den auch nutzen will. Das stört
sich natürlich gegenseitig.
Die Fleury-Lib erlaubt es, z.B. die Datenleitungen des LCD auf PC..
zugeben und die Steuerleitungen auf freie PB.. oder PD.. oder ... zu
geben.
Für einen Anfänger legst Du aber ordentlich auf :-)
Danke für den Tipp.
Habe ich Übersehen das PD0 und PD1 bim Atmega 32 RXD und TXD vom UART.
Der RS Anschluss vom LCD lag auf dem PD0. Das War der Fehler.
Ich habe in der #include <util/LCD_display_free_int_pins.h> aus
#define LCD_PIN_RS 0 einfach
#define LCD_PIN_RS 3 gemacht und schon liegt der RS Anschluss vom LCD
auf PD3. Und ich kann die Funktion uinit() // uart config
anschalten.
Ich habe die #include <util/LCD_display_free_int_pins.h> aus der CD vom
Buch AVR Mikrocontroller in C programmieren vom Franzis Verlag. Eine
böse Falle dass die in der Vorlage den PIN RS das LCD auf den PIN PD0
des Atmega legen.
Ich bin ganz schön ins schwitzen gekommen und hat mich viel Zeit
gekostet
diesen kleinen Fehler zu finden. Ohne den Tipp von Dieter Frohnapfel
wäre ich nicht darauf gekommen.
Jetzt sollte es mir gelingen mein erstes großes Projekt fertigzustellen.
Trotzdem noch eine Frage ist Funktion uinit() // uart config also UART
notwendig für das schreiben auf die SD Karte. Es hat ja auch ohne UART
funktioniert und vom SD Karten Modul ist kein Pin an UART angeschlossen.
nochmals Danke
Holger
Hallo noch mal.
Ich mache einen neuen Thread auf, ich habe nur noch eine Frage alles
andere ist gelöst.
Dieter F. schrieb:> Na ja, es ist schon unpraktisch Port D als LCD-Port zu verwenden, wenn> dort der U(S)ART beheimatet ist und man den auch nutzen will. Das stört> sich natürlich gegenseitig.>> Die Fleury-Lib erlaubt es, z.B. die Datenleitungen des LCD auf PC..> zugeben und die Steuerleitungen auf freie PB.. oder PD.. oder ... zu> geben.>> Für einen Anfänger legst Du aber ordentlich auf :-)
Danke für den Tipp.
Habe ich Übersehen das PD0 und PD1 bim Atmega 32 RXD und TXD vom UART.
Der RS Anschluss vom LCD lag auf dem PD0. Das War der Fehler.
Ich habe in der #include <util/LCD_display_free_int_pins.h> aus
#define LCD_PIN_RS 0 einfach
#define LCD_PIN_RS 3 gemacht und schon liegt der RS Anschluss vom LCD
auf PD3. Und ich kann die Funktion uinit() // uart config
anschalten.
Ich habe die #include <util/LCD_display_free_int_pins.h> aus der CD vom
Buch AVR Mikrocontroller in C programmieren vom Franzis Verlag. Eine
böse Falle dass die in der Vorlage den PIN RS das LCD auf den PIN PD0
des Atmega legen.
Ich bin ganz schön ins schwitzen gekommen und hat mich viel Zeit
gekostet diesen kleinen Fehler zu finden. Ohne den Tipp von Dieter
Frohnapfel
wäre ich nicht darauf gekommen.
Jetzt sollte es mir gelingen mein erstes großes Projekt fertigzustellen.
Trotzdem noch eine Frage ist Funktion uinit() // uart config (also
UART)
notwendig für das Schreiben auf die SD Karte. Es hat ja auch ohne UART
funktioniert und vom SD Karten Modul ist kein Pin an UART angeschlossen.
nochmals Danke
Holger
Holger W. schrieb:> notwendig für das Schreiben auf die SD Karte.
offensichtlich nicht
Den uart verwendet man als Protokollfunktion zur Fehlersuche. Das geht
aber auch mit dem LCD. Du brauchst den uart also nicht unbedingt. der
von Dir verwendete M32 ist im Prinzip veraltet. Aktuell wäre z.B. der
pingleiche M1284 für rund 6€. Irgendwann steigst du eh um.
Holger W. schrieb:> Trotzdem noch eine Frage ist Funktion uinit() // uart config also UART> notwendig für das schreiben auf die SD Karte.
Hallo Holger,
nein. Ich kenne die von Dir eingesetzten SD-Routinen zwar nicht, gehe
aber davon aus dass die Kommunikation mit der Karte per SPI abläuft. Der
U(S)ART wird wohl nur zur Zustandsportokollierung / für Fehlermeldungen
mit "uputs(..." eingesetzt. Diese solltest Du dann wenigstens auf dem
LCD ausgeben.
Wenn Du den U(S)ART nicht nutzen willst kannst Du die ursprüngliche
Pin-Belegung auch beibehalten ... .
Gruß
Dieter
grundschüler schrieb:> Holger W. schrieb:>> notwendig für das Schreiben auf die SD Karte.>> offensichtlich nicht>> Den uart verwendet man als Protokollfunktion zur Fehlersuche. Das geht> aber auch mit dem LCD. Du brauchst den uart also nicht unbedingt. der> von Dir verwendete M32 ist im Prinzip veraltet. Aktuell wäre z.B. der> pingleiche M1284 für rund 6€. Irgendwann steigst du eh um.
Was ist der Unterschied ? Ich habe im Internet nichts gefunden.
Grüße Holger
> Ich habe im Internet nichts gefunden.
Kopfschüttel - das kann gar nicht sein.
Für beide Kontroller kannst du mit jeder beliebigen Suchmaschine die
Datenblätter finden. Außer mit Hotel-Suchmaschinen.
Zum Beispiel liefert Bing für "atmega32 atmega1284 vergleich" sogar als
allererstes diesen Link:
http://mikrocontroller.net/articles/AVR_Typen (lustig, was?)
Und wenn du dort mit Strg-F nach "1284" suchst, landest du in einer
Vergleichstabelle.
Den weg zum Klo findest du aber alleine? :-)
grundschüler schrieb:> Den uart verwendet man als Protokollfunktion zur Fehlersuche. Das geht> aber auch mit dem LCD. Du brauchst den uart also nicht unbedingt. der> von Dir verwendete M32 ist im Prinzip veraltet. Aktuell wäre z.B. der> pingleiche M1284 für rund 6€. Irgendwann steigst du eh um.
Alles klar ich habe die Bezeichnungen M 32 bzw MI1284 auf das LCD
bezogen.
und deshalb nichts gefunden.
Restlos verblödet bin ich nicht. Ist mein erstes Projekt.
Holger