PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : avr-eeprom programmiern?



timfri
28.10.2006, 18:05
hallo,

ich verzweifle daran den eeprom meines atmega32l zu programmieren.
avr studio schlägt immer nur vor das board zu überprüfen.

verrät mit jemand woran das liegen kann, dass das nich funktioniert? :-k

danke schon mal. O:)

Hubert.G
28.10.2006, 19:54
Kannst du nur das EEprom nicht programmieren oder den Flash auch nicht?

timfri
28.10.2006, 20:52
flash lässt sich beschreiben. nur eeprom nicht.

ich habs gerade noch mal mit nem atmega16 anstelle des atmega32l probiert, aber da klappts genauso wenig.
](*,)

timfri
28.10.2006, 21:47
oh je... sorry für den brutaln titel übrigens :-#

linux_80
28.10.2006, 22:51
Hallo,
Da muss ich aber nommal nachfragen, Du willst das EEprom per ISP beschreiben, oder per Software ?
Hast Du Daten deklariert, die im EEprom liegen, so daß in der .eep-Datei was drin ist !?


PS:
Den Titel des Threads kannst Du ja nachträglich ändern, einfach den 1. Beitrag oben editieren.

timfri
29.10.2006, 09:22
danke erstma für den tip mit dem titel. ;)

also:

ich hab mit avr studio und avr-gcc ein programm geschriebn.
ich selbst hab nix in die .eep-datei geschriebn, es ist allerdings trotzdem eine 13byte große datei "main.eep" (entsprchend dem projektnamen) vorhanden.

und da der chip ohne das eeprom zu programmiern nicht das tut was es soll, vermut ich mal, dass avr-gcc irgendwas wichtiges in diese .eep-datei verpackt hat.

Hubert.G
29.10.2006, 09:35
Ich habe mal nachgesehen, meine *.eep sind auch 13byte groß und trotzdem leer. Diese Datei legt AVRGCC automatisch an.

timfri
29.10.2006, 09:48
meinst jetzt mit nem hex-editor nachgeschaut?

und woran könnt es so pauschal noch liegn das mein adc nich geht? O 8-[

Hubert.G
29.10.2006, 10:04
Ich habe jetzt noch in ein paar anderen Dateien nachgesehen, es steht überall nur 1ff drinnen.
Lass mal deinen Code sehen, dann kann man vielleicht etwas sagen.

timfri
29.10.2006, 10:22
ok. das is die datei mit der klasse, die für adc zuständig ist.

Hubert.G
29.10.2006, 13:16
Woher weist du das die Konvertierung fertig ist? So wie ich das sehe liest du unmittelbar nach dem Start aus.

timfri
29.10.2006, 13:52
achso. daran hab ich gar nicht gedacht.
wie lang sollt ich denn nach dem start der konvertierung warten?

linux_80
29.10.2006, 13:55
Das mit dem C-Programmieren sollte auch noch etwas geübt werden,
Edit: ich wollte ja sagen, in dei Header-Datei kommt normalerwese kein Code, da gibts die .cpp-Datei dafür,
dann hätten wir hier auch schöne Unterforen die speziell dem Programmieren dienen, und nicht der Elektronik !

Dann zum ADC, Du schaltest den ADC immer aus beim starten der Messung, so kann da nix rauskommen, und wie Hubert.G schon sagte, muss man noch auf das Ende der Messung warten bevor man die Werte ausliest.
Man wartet nicht eine bestimmte Zeit, sondern bis der ADC sagt, das er fertig ist.

timfri
29.10.2006, 14:11
sorry, den einwand mit dem programmiern hab ich nich verstanden. ;)

ok. dass man warten, bis der adc sagt, dass er fertig ist, hab ich grad nachgelesen.
warum schalt ich denn den adc aus, wenn ich ne messung starte? :-s

linux_80
29.10.2006, 14:25
am Anfang setzte Du dieses Bit zum aktivieren des ADC:

ADCSRA = (1<<ADEN);
passt so,
eine Zeile weiter setzt Du diese Bits:

ADCSRA = (1<<ADPS2) | (1<<ADPS0);
da diese im gleichen Register stehen wie ADEN, dieses aber hier nicht mehr gesetzt wird, ist es 0, also wird der ADC wieder deaktiviert, genauso bei den anderen Zeilen in denen ADCSRA bearbeitet wird.

Am einfachsten zu lösen lässt es sich wenn bei weitern Bits das Register so behandelt wird:

ADCSRA |= (1<<ADSC);
wichtig ist das | vor dem =
so bleiben alle andern Bits gesetzt die vorher schon gesetzt waren.

timfri
29.10.2006, 14:30
hm. eigentlich ganz schön logisch.
muss ich gleich mal ausprobiern.

danke. :)

Hubert.G
29.10.2006, 15:09
Am schönsten geht es meiner Ansicht nach mit dem Interrupt

timfri
29.10.2006, 15:11
und wie gehts ohne interrupt?

linux_80
29.10.2006, 15:24
Also das Datenblatt eines AVR hat alle Infos die man dazu braucht, und im Wiki sind auch ziemlich viel Infos und Beispiele enthalten.


Einfach warten bis der ADC fertig ist, das gibt das Bit ADIF in ADCSRA an, wenn das gesetzt ist, ist er fertig:

while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
danach muss man das Bit ADIF setzen, damit es gelöscht wird um ein weitersmal messen zu können.