Hey Leute, ich verzweifel gleich!!! Seit Stunden durchkämme ich das Netz nach Antworten: Ich möchte ganz einfach mit AVR Studio 4(AVR GCC, WIN AVR) ein ATmega32 programmieren. Mein Mikrocontroller läuft mit einem exteren 4 MHz Quarz, wird von 5V gespeist und wird über eine JTAG Schnittstelle angesprochen. Ich hoffe das reicht erstmal an Infos, damit ihr mir helfen könnt. Ach und bevor Kommentare kommen ich soll mal ins Datenblatt schauen, hab ich, aber da blick ich leider auch nicht ganz durch... Vermutlich ist es doch so: OCDEN(On-Chip-Debugging-ENable):True (Wobei hier bei bin ich mir gar nicht mehr sicher im Datenblatt stand, dass das nicht enabled werden soll wenn JTAGEN enabeled ist!) JTAGEN(JTAG-ENable): True SPIEN(SPI-ENable): Egal ich sag jetzt mal -> True EESAVE(EEprom-SAVE): ?!? war von vorne rein -> False BOOTSZ(BOOT-SiZe): ?!? war von vorne rein -> "Boot Flash Size = 1024 words start address = $1C00 BOOTRST(BOOT-ReSeT): ?!? war von vorne rein -> True CKOPT(ClocK-OPTion): ?!? hab ich so aus dem Datenblatt -> True BODLEVEL(?): ?!? war von vorne rein -> Brown-out detection at VCC = 2.7V BODEN(?-ENable): ?!? war von vorne rein -> False SUT_CKSEL(?):Ext. Crystal/Resonator Medium Freq.;Start-up time: 16K CK + 64ms Danke, schon mal und ich freu mich schon auf Antworten... Gruß Justus
PROgrammer schrieb: > OCDEN(On-Chip-Debugging-ENable):True (Wobei hier bei bin ich mir gar > nicht mehr sicher im Datenblatt stand, dass das nicht enabled werden > soll wenn JTAGEN enabeled ist!) Du hast offenbar ein anderes Datenblatt als ich. Wenn du JTAG nicht nur zum Programmieren sondern auch zum Debuggen nutzen willst, muss es True sein. > JTAGEN(JTAG-ENable): True OK, du willst es nutzen. > SPIEN(SPI-ENable): Egal ich sag jetzt mal -> True Kann nicht schaden. > EESAVE(EEprom-SAVE): ?!? war von vorne rein -> False OK. > BOOTSZ(BOOT-SiZe): ?!? war von vorne rein -> "Boot Flash Size = 1024 > words start address = $1C00 Egal. > BOOTRST(BOOT-ReSeT): ?!? war von vorne rein -> True Nutzt du einen Bootlader? Nein? Dann False. > CKOPT(ClocK-OPTion): ?!? hab ich so aus dem Datenblatt -> True OK. > BODLEVEL(?): ?!? war von vorne rein -> Brown-out detection at VCC = 2.7V Bei 5V Betriebsspannung wäre ein höherer Wert sinnvoller. > BODEN(?-ENable): ?!? war von vorne rein -> False In der späteren Serie sollte man das schon nutzen. > SUT_CKSEL(?):Ext. Crystal/Resonator Medium Freq.;Start-up time: 16K CK + > 64ms OK.
Vielen Dank! Ich kann es zwar erst nachher testen aber trotzdem schon mal danke. Hört sich plausibel an... Zwei Fragen hab ich dennoch: -Brauch ich denn ein Bootloader bzw. wo kann ich den abstellen? -Was meinst du mit Serie? Meinst du, wenn ich mal mehrere davon produzieren möchte
Leider kann ich mein Mikrocontoller immer noch nicht debuggen(Hält nicht an Breakpoint, Zeigt mir bei Pause nicht an wo er ist und Variablen kann ich mir im )... Es läuft zwar das Programm und ich erhalte an den Ausgängen das richtige Ergebnis aber das war auch schon vorher so Woran könnte das liegen?(Ich seh nur noch eine Fehlermöglichkeit, denn ich weiß nicht was das bringt ;-): Das ELF-File) Ich hoffe ihr könnt mir hilfreiche Tipps geben. Ach ich glaub zwar nicht aber hier ist mein Code: //Testdatei //Includes #include<avr/io.h> //Variablen int zaehler; //Konstanten //Funktionen void Init(void){ //Ports DDRA |= (1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3)|(1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7); PORTA |= (1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3)|(1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7); DDRB &= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7); PORTB |= (1<<PB0)|(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB4)|(1<<PB5)|(1<<PB6)|(1<<PB7); DDRC &= ~((1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6)|(1<<PC7 )); PORTC |= (1<<PC0)|(1<<PC1)|(1<<PC2)|(1<<PC3)|(1<<PC4)|(1<<PC5)|(1<<PC6)|(1<<PC7); DDRD |= (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7); PORTD |= (1<<PD0)|(1<<PD1)|(1<<PD2)|(1<<PD3)|(1<<PD4)|(1<<PD5)|(1<<PD6)|(1<<PD7); } //Main int main (void){ Init(); zaehler = 0; while(1){ switch(zaehler){ case 0: zaehler = 1; PORTA |= (1<<PA1)|(1<<PA2)|(1<<PA3)|(1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7); PORTA &= ~(1<<PA0); case 1: zaehler = 0; PORTA |= (1<<PA0)|(1<<PA1)|(1<<PA2)|(1<<PA3)|(1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7); } } return 0; }
PROgrammer schrieb: > -Brauch ich denn ein Bootloader bzw. wo kann ich den abstellen? Ob du ihn brauchst, weiß ich nicht. Man nimmt ihn gern für Geräte, an die man im Einsatz schlecht heran kommt, um sie dann aus der Ferne neu programmieren zu können. Das ist aber nicht ganz simpel. Die Fuse "BOOTRST" stellt ihn an oder ab, siehe Datenblatt. > -Was meinst du mit Serie? Meinst du, wenn ich mal mehrere davon > produzieren möchte Für den Basteltisch muss man nicht so pingelig sein, für 1000 verkaufte Geräte schon eher. Obwohl es nicht schadet, grundsätzlich und immer so zu arbeiten, als ob das Leben davon abhängen würde. "Defensives Programmieren" ist so ein Schlagwort.
Danke für die Erklärung Leider hab ich mich vorhin zweierlei getäuscht: -Ich hatte doch ein Fehler in meinem Code: Die "break;" fehlten in den Cases -Und leider hab ich von meinem Ozilloskop falsch abgelesen, die Werte an den Pins stimmten überhaupt nicht Ich hab dann noch den IC aus meiner Platine genommen und einfach mal so debuggt und siehe da, wenn ich Pause drücke, wird mir zumindest schon ein Pfeil angezeigt, wo ich gerade bin... Komischer Weise bleibt er immer im Case 1 stecken?!? Die Breakpoint überspringt er immernoch und die Variablen kann ich auch noch nicht auslesen! In der Message Box steht immer "JTAGICE mkII: IDR event 0xff." Ist das eigentlich richtig oder steht da sogesagt ich starte dein Programm neu? Ich komm nicht mehr weiter...
Leider habe ich mit JTAG auch keine Erfahrung und kann dir nicht weiter helfen. Aber wie so oft ist Dr. Gurgel eine gute Wahl. Er kennt einige Hundert Einträge zu dem Thema. Ansonsten der übliche Spruch... RTFM. http://support.atmel.com/bin/customer.exe?=&action=viewKbEntry&id=397
Danke ich habe letztendlich ein Kurzschluss zwischen dem Reset-Pin und Masse gefunden und dann klappt jetzt alles. Ich habe jetzt aber schon wieder ein neues Problem: Ich habe das schon in den Thread "Software UART"(Beitrag "Re: Software UART") gepostet, aber da ich diesen Thread durch suchen und in den neusten Beiträg in diesem Forum nicht finden kann, mach ich hier nochmal darauf aufmerksam(ohne ein ganz neues Thema dafür zuerstellen). DANKE und genießt die warmen Tage... Ich hoffe die Unwetter ziehen schnell vorbei! Justus
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.