Hallo alle zusammen,
hab mich jetzt auch mal an die Programmiesprache c gewagt. Allerdings
bekomme ich das Program nicht fehlerfrei zum laufen.
(Programm ist im Anhang, allerdings alles in einer txt Datei)
Kann ich einen kompletten Ordner in den Dateianhang schieben?
Ich orientiere mich größtenteils an die Tutorials. Ich programmiere
einen ATMega16 mit dem AVR Studio und übertrage mit PonyProg. Das meiste
funktioniert, aber bei einigen Sachen bin ich überfragt und weiß nicht,
wo der Fehler ist.
Mein Programm beinhaltet zur Zeit fünf Dateien. Ich hab einige Probleme
mit dem EEPROM und der Entprellung. Ich hab meine Fragen bzw. Probleme
mit an die Programerklärung gekoppelt.
Programmerklärung:
*Eingangsnamen.c:*
ich will, das der ATMega einmal "EING.x + 10 Leerzeichen" = 16 Byte
ins EEPROM schreibt, wobei x für die zahlen 1 - 8 steht. 16 byte * 8 =
128 byte im EEPROM (
1 | uint8_t Eingang[8][16] EEMEM = {};
|
)
Das soll er aber nur einmal machen, sodass er nicht nach jedem Reset das
EEPROM neu beschreibt. Nach dem ersten Beschreiben
)(auch im EEPROM) -> somit beschreibt er nur einmal
-> habe ich im AVR Studio getestet und es funktioniert,aber:
1. wenn ich in watch gehe: myByte sagt er Location not valid Warum?
2. wenn ich meine for Schleifen hoch zähle bis zu einem bestimmten Wert,
zeigt er mir, dass er sie runter zählt (z.b j=4 am Anfang und nicht 0)
Ist das normal?
3.
1 | uint8_t Eingang[8][16] EEMEM = {};
|
2 | uint8_t Anfangsnamen[1] EEMEM ={};
|
)
Das steht in Eingangsnamen.c, und das selbe in Verteiler.c und LCD.c
nur mit extern davor.
Warum kann man diese nicht ohne extern in Vertiler.c und mit extern in
Eingangsnamen und in LCD.c schreiben? Ist das nicht egal? Hauptsache
ist doch, das ich diese in einer *c. definiert habe. In anderen *c.
Dateien, die darauf zugreufen wollen, sage ich dem compiler mit dem
Attribut extern doch bloß, dass diese Array woanders definiert ist.
../Eingangsnamen.c:5: warning: `Eingang' initialized and declared
`extern'
Das ist jedenfall die Warnung die ich bekomme und dann noch den ERROR,
das
er die objekt file nicht erstellen kann.
Ich würde es eigentlich gerne in Verteiler.h schreiben kann, also mit
extern und ohne extern in Verteriler.c. Dann nur noch in jede Datei
Verteiler.h includen.
Funktioniert aber nicht und ich verstehe nicht warum.
*Entprellung.c:*
"Debouncing 8 Keys" von Peter Dannegger -> ich habe vier Taster
angeschlossen, die entprellt werden
4. Wenn ich Taster_1 sage, er soll nur was machen, wenn ich kurz drücke,
dann reagiert dieser aber auch wenn ich lange drücke. Kann doch nicht
Sinn der Sache sein. Oder?
5. Wie soll das mit dem Repeat funktionieren -> habe ich ausprobiert,
aber
der hat nach jedem Tastendruck reagiert. Ich hab dann auch mal die
Repeat Zeiten verändert, hat aber auch nichts gebracht. Kann mir
Jemand weiter helfen?
*LCD.c:*
LCD-Routinen aus dem Tutorial und einige, die ich mir selber geschrieben
habe.
u.a.: string_Ausgabe: ich kann der Funtion sagen, wo (Zeile,Spalte) ich
die Ausgabe auf dem LCD hinhaben möchte und wieviel Zeichen er ausgeben
soll. Außerdem sage ich ihm noch, ob er aus dem EEPROM oder dem SRAM
lesen soll.
6. Hier funktioniert die Länge des ausgebenen strings und die Position,
allerdings zeigt er mir immer nur fünf schwarze Kästechen auf dem
Display.
Hier habe ich auch schon rumprobiert was das Zeug hält. Ich kann auch
ins
EEPROm schreiben, dann lesen und ausgeben, also mit den Funktionen aus
eeprom.h. Bloß mit dieser Funktion will er einfach nicht.
Ich hab im AVR Studio durchgetestet und er zeigt mir auch an, dass er
den
Buchstaben, den ich haben will in der Variable byte hat. Er übergibt
diese auch an
). Bloß wenn ich das Programm übertrage zeigt er mir nur 5 schwarze
Kästchen an. Ich habe auch keine Idee mehr woran es liegen könnte.
*Uhr.c:*
von Peter Dannegger, allerdings habe ich ein bisschen was
dazugeschrieben,
sodass ich mir die Stunden, Minuten und Sekunden anzeigen lassen kann
Hier funktioniert alles.
*Verteiler.c:*
enthält die main
und dann gibts zu jeder *.c Datei noch die entsprechende header files
*.h
7. Frage zu Verteiler.h: Muss ich bei den #define`S alle einzeln mit
#ifndef und #endif umklammern, sodass ich sie dann nicht ausversehen in
einer *.c Datei (oder *.o) doppelt drin habe?
Ok, schon mal Danke im vorraus, der schon mal Bock hatte sich den Text
durchzulesen.
Gruß von Dirk