Hi, könnte mir bitte, wer sagen warum dieser Code nicht läuft. Vielen Dank #include <avr/io.h> #include <avr/eeprom.h>
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
|
Anzeige
|
EEMEM schreiben/lesenHi, könnte mir bitte, wer sagen warum dieser Code nicht läuft. Vielen Dank #include <avr/io.h> #include <avr/eeprom.h>
Gast
#4061500
Johannes Senzenberger schrieb: > könnte mir bitte, wer sagen warum dieser Code nicht läuft. Weil er keine Beine hat. Beschreib dein Problem vllt. ein bisschen genauer, siehe Netiquette. Stimmt! Ich versuch den EEPROM zu beschreiben. Der Controller ist ein ATMEGA16A. Der Grund hierfür ist, die bleibende Veränderung von Grenzwerten via RS232. Die Schnittstelle funktioniert in einem anderen Programm. Bei dem EEPROM habe ich sehr viel Tutorials gesehen, aber ich komme nicht auf die Lösung. Danke für den Link. Ich versuche nun doch schon etwas verbissen die Aufgabe zu lösen.
Gast
#4061521
Johannes Senzenberger schrieb: > könnte mir bitte, wer sagen warum dieser Code nicht läuft. "Gehen" wird dein Code schon, aber - vielleicht hast du dein EEPROM nicht programmiert. - vielleicht ist dein EEPROM kleiner als 12345. dann wirst du nämlich bei 12345 (0x3039) keine Daten ablegen können. Wir wissen es nicht. Denn du willst uns ja nicht alles zeigen. Nennt man Salamitaktik .....
Gast
#4061524
Johannes Senzenberger schrieb: > Der Controller ist ein ATMEGA16A. Dann ist dein EPROM nur 512 (0x0200) Bytes gross. Ich habe einen externen Kristall Quarz mit 8 MHZ. Die Debugging Frequenz ist ein MHz. Ich denke die EESAVE muss nicht gesetzen, weil der EEPROM beim Programmieren gelöscht werden soll. ok. Danke dann wird einiges klar. Danke Loopseher schrieb: > Nennt man Salamitaktik ..... Und das, was du schreibst, nennt man Blödsinn. Johannes Senzenberger schrieb: > könnte mir bitte, wer sagen warum dieser Code nicht läuft. Vielen Dank Also eigentlich läuft es. Zumindest auf einem 644P. Gab es bei den Altlasten nicht ein Problem mit Adresse 0? mfg. Johannes Senzenberger schrieb: > ok. Danke dann wird einiges klar. Hoffentlich meinst du damit nicht den Unsinn von diesem Schleifengucker. Vergiss das! mfg. Gleiches Problem. Mein Debugger ist AVR mk2. Ich denke bei den Einstellungen für den Programmer mache ich ncoh was falsch. Ich habe es auf beiden Wegen versucht. Einmal EEMEM vor und nach dem Variablen namen geschrieben. Salamitaktik möchte ich gerne vermeiden, aber ich habe noch nicht soviel mit Foren gearbeitet.
Gast
#4061568
Johannes Senzenberger schrieb: > Gleiches Problem. Du schreibst ja nicht was du erwartest. Du hast einen MKII, da kannst du ja mal das EEPROM lesen und prüfen ob da was drinsteht was du reingeschrieben hast.... Johannes Senzenberger schrieb: > Mein Debugger ist AVR mk2. Ich denke bei den > Einstellungen für den Programmer mache ich ncoh was falsch. Das einzige, was man da falsch kann, ist, dass man da überhaupt etwas einstellt. Unter normalen Bedingungen, d.h. bei einem CPU-Takt von 1 - 20 MHz, läuft der mit den Default-Einstellungen. Wie gross ist Vcc? mfg.
Gast
#4061587
Loopseher schrieb: > - vielleicht ist dein EEPROM kleiner als 12345. Ja das war Käse, zu schnell geschaut. 5V. Ground sollte auch ok sein, da ich ein evaluation board (STK16+ von waveshare) verwende. Auch der Jumper am Board ist auf 5V position. Ich habe auch versucht die Interrupts zu enablen. Was ist gemeint mit Altlasten und Adresse 0? Johannes Senzenberger schrieb: > Ich habe auch versucht die Interrupts zu enablen. Das hat ja nichts mit deinem Problem zu tun. > Was ist gemeint mit Altlasten und Adresse 0? Ich habe die alten Controller, Atmega8, 16, ..., nie verwendet. Deswegen hat mich das nie besonders interessiert. Aber es gibt da irgendein Poblem mit Adresse 0. Da wird irgendwie was unter bestimmten Bedingungen gelöscht oder nicht richtig beschrieben. Dazu gibt es auch jede Menge Beiträge im Forum. Was sagt denn dein Debugger dazu? Guck doch einfach rein ins EEPROM. Dass dein Programm funktioniert, siehst du ja an meinem Screenshot. Ist zwar ein 644. Aber das ist auch nur ein AVR. Allerdings kennt der das Problem mit Adresse 0 nicht. mfg. Ich hab nur den AVRISP mk2. Soweit ich weiß, kann ich mit diesem Gerät nicht die Werte an den Breakpoints auslesen. Dachte ich mir schon, dass keine Verbindung mit den Interrupts besteht. Man bewegt sich halt dann mal schnell in eine falsche Richtung. Ich werde das Forum durchsuchen. Vielleicht gibts da eine Lösungen. Vielleicht direkt adressieren. Vielen Danke, soweit deinen Bemühung und natürlich für diesen Tipp!! mfg Ich habe jetzt noch das eeprom.eep unter dem Debug ordner mit dem Text editor geöffnet. Konvertiert von Hex nach Dezi 020000007B0083 => 562949961482371 Grüße Wie wärs damit, das EEPROM erst einmal zu beschreiben? Z.b. Mit eeprom_write_word. Mit der Zuweisung wird es nicht ins Eeprom geschrieben, es sei denn, du schreibst das .eep File, das beim kompilieren hoffentlich erzeugt wurde. Ok, aber jetzt funktioniert es. Ich ich habe jetzt die eeprom.eep datei beim Debugger hinzugefügt und programmiert. Die Zeichen :00000001FF steht in jeder eeprom.eep auch bei anderern Porgrammen Die Zeichen :020000007B0083 kann ich mir nicht erklären. Mfg Johannes Senzenberger schrieb: > Ich habe jetzt noch das eeprom.eep unter dem Debug ordner mit dem Text > editor geöffnet. Das ist das, was beim Programmieren reingeschrieben wird. Das kannst du zur Kontrolle auch aus dem µC auslesen. Johannes Senzenberger schrieb: > Konvertiert von Hex nach Dezi Das braucht niemand. Johannes Senzenberger schrieb: > 020000007B0083 Das ist interessant. 2 Bytes an Adresse 0. Und zwar diese beiden: 7B 00. Das ist die 123:
Da es uint16 ist, sind es 2 Bytes. Passt alles. mfg.
Gast
#4061810
Und zur Kontrolle vielleicht noch ein:
Gast
#4061827
Johannes Senzenberger schrieb: > Die Zeichen :020000007B0083 kann ich mir nicht erklären. http://de.wikipedia.org/wiki/Intel_HEX Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|