hallo, ich haben nach dem vorbild von AVR-Tutorial eine LED an PortB1 meines ATMega32 angeschlossen. Dazu dieses Programm geschrieben. Aber die LED leuchtet nicht, weder bei PORTB=0; noch bei PORTB=255; Kann mir jemand einen Tipp geben? Zwischen GND und dem Pin am Port B messe ich immer 4V, egal ob PORTB=0 oder 255. Der Prozessor wird von meinem PC erkannt: per uisp -dprg=stk200 ->AtMega32 found beschreiben und löschen geht auch ohne Fehler. #include <avr/io.h> int main (void) { DDRB=255; // Ausgänge while(1) { PORTB=255; //PORTB=0; } return 0; } Danke Chris
Hast Du Dir schon die "AVR-Checkliste" hier zu Gemüte geführt? Wenn nicht, solltest Du die mal durchgehen. Du findest sie links im Hauptmenü dieser Site unter "Artikel".
die liste hab ich durch. was ich nicht verstehe: chris@linux:~/atmega32/1> uisp -v -dprog=stk200 AVR Direct Parallel Access succeeded after 31 retries. Atmel AVR ATmega32 is found. Warum erst nach 31 retries ? und bei chris@linux:~/atmega32/1> uisp -v -dprog=stk200 --erase --upload if=rom.hex AVR Direct Parallel Access succeeded after 31 retries. Atmel AVR ATmega32 is found. Erasing device ... Reinitializing device AVR Direct Parallel Access succeeded after 31 retries. Atmel AVR ATmega32 is found. Uploading: flash ##### (total 158 bytes transferred in 0.15 s (1046 bytes/s) Polling: count = 2, min/avg/max = 4.77/4.79/4.81 ms also 158 bytes übertragen. aber wenn ich chris@linux:~/atmega32/1> uisp -v -dprog=stk200 --download of=test.hex AVR Direct Parallel Access succeeded after 31 retries. Atmel AVR ATmega32 is found. Downloading: flash ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ######################################################################## ################# (total 32768 bytes transferred in 27.86 s (1176 bytes/s) 32786 bytes ausgelesen ? hab mir die fusebits und lock bits angeschaut , aber die sind alle im auslieferungszusandt. chris
Hi welcher Programmer? Pegel des Reset-Pins? Mal den Programmer abgezogen? Pull-Up (10k) am Reset? Mal avrdude (neuer und besser gepflegt) ausprobiert? Matthias
hallo, hab stk200 dongle, Pegel am Reset Pin ist 5 V, 10k Pull-Up hab ich .. nein AVRDUDE hab ich nicht ausprobiert. Was ich aber gemacht habe: Verher hab ich ja das in Linux gemacht, jetzt bin ich in Windows. Also Windows jetzt Hab PonyProg2000 installiert.Da kann mein ATMega32 ausgelesen werden(es werden keine Fehler gemeldet) Dann hab ich WinAVR instelliert. mit dem Programmers Notepad eine Datei: test.cc geschrieben Inhalt test.cc: # include <avr\io.h> int main(void) { DDRB=255; // Ausgänge while(1) { PORTB=0; } return 0; } in der Eingabeaufforderung: C:\WinAVR\Progs>avr-gcc -g -mmcu=atmega32 test.cc test.cc:12:2: warning: no newline at end of file also noch alles ok , oder ? dann C:\WinAVR\Progs>avr-objcopy a.out rom.hex BFD: a.out: warning: Empty loadable segment detected, is this intentional ? wenn ich dann die rom.hex per PonyProg zum Controller übertrage geht natürlich nix. Hilfe wilkommen Chris
>-dprog=stk200 AVR Direct Parallel Access succeeded after 31 retries.
-Zu schnell Programiert
-Zu lange Leitung
-Zu schlecht geschirmte Leitungen
-Zu weinig geblockte Komponennten (Spannungsregler,Controller und
andere Komponennten ohne 100nF)
Check das mal
Hi versuch mal angehängte HEX-Datei. Hab ich eben kurz getestet und funktioniert.
1 | #include <avr/io.h> |
2 | |
3 | void wait(void); |
4 | |
5 | int main (void) |
6 | {
|
7 | unsigned int i; |
8 | |
9 | DDRB=255; // Ausgänge |
10 | while(1) |
11 | {
|
12 | PORTB=255; |
13 | for(i = 0; i < 10; i++) wait(); |
14 | PORTB=0; |
15 | for(i = 0; i < 10; i++) wait(); |
16 | }
|
17 | |
18 | return 0; |
19 | }
|
20 | |
21 | //wartet ein paar ms
|
22 | void wait(void) |
23 | {
|
24 | volatile unsigned int i; |
25 | for(i=0;i<50000;i++); |
26 | }
|
Matthias
was heißt zu schnelle Programmierart? Leitung ist ein Falchbandbkabel ca 40 cm, führt zu meinem Stechboard, auf dem Steckboard ist erst das stk200 aufgebaut. muss ich zwischen jeden Vcc und GND 100nF keramik Kondensator? ( 74HCT244 ? un MC ? ) ich dachte ich hab einen bei der schaltung mit 7805 das es reicht ? chris
Hi die 31 retries können schon passieren wenn der Programmer die Reihenfolge von Reset und SCK-Flanken nicht ganz einhält. Denn bemerkt der AVR eine SCK-Flanke wo keine gedacht war und synchronisiert sich erst nach 31 Versuchen auf den SPI. Matthias
hi Matthias, danke für die Mühe. Habs mit PonyProg auf den controller gespielt. Meine LED tut aber nix. Wenn ich zwischen GND und einem PORTB Pin die Spannugn messe ists immer 4.92V unverändert. Hab es auch gleich nochmal gedownloaded, das flashen hat funktioniert.Muss ich den STK200 abstecken ? chris
muss wohl irgendwo ein Fehler in der Schaltung haben. Ich werds nochmal richtig durchschauen. dann meld ich mich nochmal ;-) Achja, hab einen dummen Fehler gemacht. Reset Pin ist auf 2.0 V? 10kOhm PullUp , 100nF Kondensator hab ich drin. Chris
Die LED blinkt. ABER : ich hab weis nicht warum. ich hab den 100nF zischen GND und RESET raus, außerdem Spannungsversorgung 12V abgeklemmt! Dh meine schaltung wir vom parallel Port mit Strom versorgt. Die LED hab ich jetzt zwischen GND und ein PORTB Pin geklemmt. Ich versteh hinten und vorne nichts mehr. Wenn ich den parrPort-Stecker rauszieh und die 12V anleg tut sich nix.Naja ich werds wohl noch mal von vorne aufstecken. Danke chris
Dann schwingt dein Spannungsregler und der MC kommt nicht aus dem Reset raus. Also Regler und MC korrekt mit Keramik-Cs beschalten. ...
> 32786 bytes ausgelesen ?
Und? Ein ATmega32 hat doch 32k Flash. Wieviel hättst du denn erwartet?
hallo @ HanneS ja, danke. Habs jetz auch rausgefunden.Den 10k Widerstand durch 7,5k ersetzt,jetzt gehts. @Rolf Magnus ich hätte 158 bytes, soviel wie ich reingeladen hab. chris
Wenn 10k am Reset nicht geht, dann hast du vermutlich irgendwelchen "Müll", den deine Resetleitung als Antenne einfängt und dadurch Reset auslöst. Dies kann auf der Betriebsspannung oder "in der Luft" sein. Ein Oszilloskop könnte das aufklären. ...
@327undsoviel bytes: der programmer ließt immer alles aus, auch die "FF`s", also leere speciherzellen... ich habe ebenfalls 15k zwischen reset und +5V, halte dich mal GANZ GENAU an das datenblatt eines 7805 und verwende 12v oder 9v batteriespg zum ersten test! Klaus.
hab leider kein oszi. eigentlich hab 12 V von einem Computer Netzteil (die Schaltung ist gleich wie im AVR-Tutorial) Meine Boebachtng mit RESET hab ich im Thread hier genauer beschrieben. http://www.mikrocontroller.net/forum/read-1-235240.html#new chris
hmm, hab jetz wieder 10k drin. Es funktioniert. Der Strom schwankt jetzt zwischen 14mA(LED an ) und 8 mA (LED aus). Danke für die ganzen tipps. Das Forum weis ich wirklich zu schätzen. Chris
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.