PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie bekomme ich das C-Programm in den AVR-Chip?



Minifriese
11.02.2004, 19:00
Moin moin!

Ich hab mir gerade WinAVR runtergeladen (WinAVR-20030913-bin-install.exe), ein 18MB-Monstrum. Allerdings bin ich jetzt unangenehm ueberrascht, dass das eine unuebersichtliche Ansammlung von Tools ist, die alle irgendwie nicht richtig zusammengehoeren.

"Programmers Notepad" hab ich inzwischen als den Editor identifiziert, mit dem ich den Quellcode schreibe. Dort muss man anscheinend erst unter "Options" irgendwie den Compiler einbinden, um den Quellcode ueberhaupt kompilieren zu koennen. Das sollte ja wohl gcc.exe sein, hab ich also mal dort eingetragen und versucht ein Minimalprogramm

int main(void)
{
return 0;
}

zu kompilieren. Aber schon das ging nicht ("gcc.exe: no input files,> Process Exit Code: 1").
In dem Readme steht dann noch was von makefiles und binutils, das sieht fuer mich alles aus wie C-Softwareentwicklung unter Unix, sprich Steinzeit, was mir noch nie gelegen hat ;-)

AVRs sind doch weit verbreitet, da gibts doch bestimmt ein vernuenftiges Entwicklungstool, so wie zum Beispiel die CControl-Basic Entwicklungsumgebung von Conrad. Muss ja nix besonderes sein, bloss ein Editor mit nem Knopf "Compile" und nem Knopf "Download to Microcontroller". Sowas wie ne sehr einfache Version vom MS Developerstudio oder dem JCreator halt, bloss um den Download-Knopf erweitert...
Kennt jemand sowas bzw weiss, wo man sowas herbekommt??

Falls nicht:
- Kann mir jemand sagen, wie ich in diesem komischen Programmers Notepad die Tools einbinden muss, damit sie aus meinem Quellcode eine Datei machen, die ich dann in den AVR-Chip schiessen kann?

-Wie kriege ich besagte Datei dann in den Chip? Anscheinend ja nicht vom Programmers Notepad aus?

-Muss ich mich bei AVR auch noch um das Linken kuemmern oder macht wenigstens das der Compiler?

Makefiles und den ganzen Summs sollte ich eigentlich nicht brauchen, meine erste Anwendung waere ein einziges C-File. Falls man bei den AVRS schon fuer einfache Portzugriffe Headerfiles (.h) einbinden muss, geht das hoffentlich noch ohne Make??
Assemblerprogrammierung taete mich auch noch interessieren, beim 68HC... (CC1) bin ich da recht fit. Ist das Handling da vielleicht bei AVRs einfacher als das von C-Programmen?

Die Hardware sollte ich eigentlich komplett haben: Ein AVR-ISP Adapter fuer den Parallelport, eine kleine Schaltung um die Pins meines AT90SLS2343 und 5V auf ein Gegenstueck zum zehnpoligen Stecker am Adapter zu bringen (nach der Schaltung im AVR-Tutorial bei Microcontroller.com).

Kann jemand helfen???

Nils

Frank
11.02.2004, 19:56
Kijon hat ein recht gutes Tutorial für den Einstieg zusammengeschrieben. Schau mal hier rein:

http://www.kreatives-chaos.com/index.php?seite=avrgcc

<Kijon> Vielleicht kannst Du es auch noch als PDF irgendwo ablegen, ist immer schön wenn man sowas beim Einstieg auf Papier hat. Ich könnte es dann auch noch im Downloadbereich legen.

Gruß Frank

Kjion
11.02.2004, 20:37
Muss mal sehen wie ich das am besten machen lässt. Kann ich aber auf jeden Fall machen. Ich sag dir dann Bescheid...

MfG Kjion

robi
12.02.2004, 17:52
Hallo,

bin/war in einer ähnlichen Situation wie du. Eine, wie ich meine, gute Einführung findest du unter

http://www.avrfreaks.net/Tools/ToolFiles/376/install_config_WinAVR.pdf

Allerdings habe ich die Übertragung vom PC auf den Mikrocontroller mit dem Programm Ponyprog v2.06 beta
Download unter:
http://www.lancos.com/ppwin95.html
bewerkstelligt.

Device auswählen, Setup durchführen und zwar so:
SETUP INTERFACE SETUP PARALLEL, AVR ISP I/0, nicht vergessen den LPTx Port auswählen und anschließend zu kalibrieren.
Dann *.hex Datei aus WinAVR.pdf Kapitel 6 (Your First WINAVR Project) laden und übertragen.

Das Kabel vom Parallelport zum Mikrocontroller sollte möglichst kurz sein. (Ich hatte eines das ca. 2m was zu ständigen Problemen bei der Übertragung führte, nachdem ich die Länge des Kabels halbiert habe, funktioniert es jetzt ausgezeichnet)
Folgenden Stecker (Paralleles Interface für AVR und PonyProg) habe ich mir gebastelt

http://s-huehn.de/elektronik/avr-prog/avr-prog.htm

Viel Erfolg
robi

Minifriese
12.02.2004, 22:19
Moin moin!

Inzwischen hab ich das WinAVR-Paket halbwegs ent-droeselt. Kjions Tutorial war da ne grosse Hilfe. Ich habs erstmal genauso eingerichtet wie dort beschrieben, mit den drei Make-Eintraegen bei den Tools und dem Speicherplatz-Anzeiger.
Jetzt kaempfe ich mit dem Programmieren, aber da ich C mal sehr gut konnte, krieg ich das schon "wiederbelebt". Hab da auch die Anleitung von Christian Schifferle installiert, die ist gar nicht schlecht, um die Eigenheiten des AVR-Cs kennenzulernen.

Das naechste Problem wird dann das Schiessen des Flash-Speichers. Ich hab mir wie gesagt den AVR-ISP bestellt. Dann hab ich auf mikrocontroller.net diesen Schaltplan fuer die ISP-Programmierung gefunden und das ganze leicht abgewandelt, weil ich ja nen anderen Chip benutze (AT90S2343) und einen anderen ISP-Stecker hab. Bei mir kommt dann der zehnpolige Stecker vom Adapter auf einer Pfostenleiste (2*5) an und von da gehen dann die Signale Reset, SCK, MISO und MOSI zu einer 8poligen Fassung. Zum Programmieren stecke ich meinen AVR da rein, danach kommt er in die wirkliche Anwendung. Externen Oszillator brauch ich keinen.
Wo ich mir noch nicht ganz sicher bin: In dem Schaltplan ist eine 5V-Spannungsquelle angegeben, ist damit gemeint, das auf dem Vcc-Pin des Adapters 5V rauskommen und den Chip und die Schaltung fuer die Programmierung versorgen? Oder muss ich die 5V von aussen anlegen, um damit den Adapter, die Schaltung und den AVR zu versorgen?

Ein anderes Problem ist Windows XP: Wenn ich das Make-Tool zum Programmieren aufrufe, bekomme ich die Meldungen:

avrdude -p at90s2343 -P lpt1 -c avrisp -U flash:w:stepper.hex
avrdude: serial_open(): can't set attributes for device "lpt1"

Ich vermute mal, das ist diese (absichtliche?) Fehlfunktion von Windows XP, dass Portzugriffe prinzipiell geblockt werden. Weiss jemand dafuer eine Loesung? Ich meine mal gelesen zu haben, dass es ein Programm gibt, dass man einmal ausfuehrt und dann hat man auf den Port, den man dabei angegeben hat, freien Zugriff. Dummerweise kann ich das aber im www nirgends finden...

Besten Dank fuer alle Tips,

Nils

jobee
13.02.2004, 00:32
Hallo Minifriese,

Den AVR mußt du von außen mit einer Stromversorgung betreiben, oder die USB Spannung benutzen.
Der Anschlußstecker von deinem AVR Board versorgt dann deinen ISP Adapter über VCC.

Wegen AVRDude schau mal hier nach:

https://www.roboternetz.de/phpBB2/viewtopic.php?t=584&highlight=avrdude.


Gruß Jörg

Minifriese
13.02.2004, 08:43
Moin,

Danke fuer die Tips. Werde also meinem kleinen Programmierboard eine 5V-Spannungsversorgung verpassen.
Das mit dem AV-Dude klappt allerdings nicht. Giveio funktioniert zwar und gibt "Success" zurueck, auch mit Status_giveio kriege ich ein "ok" angezeigt. Bloss an der Fehlermeldung aendert sich rein gar nix. Naja, mal sehen, vielleicht isses ja auch irgendeine Windows-Einstellung, die bei mir anders ist als bei dir. Du hattest aber auch XP, oder?

Nils

Minifriese
13.02.2004, 18:25
Moin,


Der AVR-Dude bringt immer noch die gleiche Fehlermeldung, den hab ich erst mal aufgegeben. Stattdessen hab ich jetzt Ponyprog installiert. Das verhaelt sich allerdings ebenfalls komisch: Ich habe zwei AVR-Controller probiert, beides AT90S2343.

- Beide kann ich mit Ponyprog lesen, sind natuerlich lauter 0xFFs drin, weil sie ja gerade neu sind. Allerdings kann ich sie erst lesen, nachdem ich bei der immer auftretenden Fehlermeldung "Device missing or unknown device (-24)" auf "Ignore" klicke.

- Bei beiden Chips kann ich das EEPROM schreiben. Das ist bei meinem einfachen Testprogramm natuerlich komplett mit 0xFFs voll, aber immerhin funktioniert diese Option. Wenn auch wieder erst, nachdem ich den Fehler -24 ignoriere.

- Bei beiden Chips kann ich weder den Flash-Speicher beschreiben, noch das ganze Device (Was wohl den Flash einschliessen wuerde). Bei dem Versuch kommt ebenfalls die Standard-Fehlermeldung wie oben, aber jetzt kommt nach dem Ignorieren die Fehlermeldung "Write error (-21)".

- Beim Befehl Config- und Security-Bits lesen kommt wieder der Fehler -24. Nach "Ignorieren" macht das Programm aber was, dann kommt nochmal der Fehler, nochmal ignorieren und ich kriege die Maske mit den Bits angezeigt. Nur: Da stehen nur die beiden Lockbits (werden ohne Haken gezeigt, also gesetzt???) und ein RCEN (ebenfalls ohne Haken). Laut Manual des 2343 sollte da aber mindestens noch ein SPIEN stehen und dann noch eine Signatur, wenn ich das richtig verstanden habe.

Den Retry-Button hab ich in allen Faellen ausprobiert, aber auch nach zig Versuchen siehts genauso aus.

Folgende Fehlerquellen hab ich schon ausgeschlossen:

-Portzugriff unter Windows: Da ich ja die Chips lesen kann, muss das wohl funktionieren. Damit ist mir wieder voellig unklar, warum der AVR-Dude nicht ging.
-Einstellung des Programmieradapters: Bei "Probe" im Setup-Menue von Ponyprog wird der Programmer als OK erkannt. Wenn ich versuchsweise den anderen AVR-ISP (API) auswaehle, kommt ein Fehler, also ist das wohl der richtige.
-Kabellaenge: Ich habe mein Kabel vorsichtshalber gleich von 1,5m auf etwa 50cm gekuerzt. Das sollte ja selbst fuer den Parallelport kurz genug sein.
- In den FAQs zum Ponyprog steht, dass man auch mit einigen der Ueberwachungszeiten im Ponyprog-INI-File spielen kann. Auch das hat nix gebracht.

Was mich etwas gewundert hat: Waehrend ich versuche zu lesen oder zu schreiben, wird die Reset-Leitung nicht auf Null, sondern erstmal nur auf ca 1V gezogen. Hat mich zwar ueberrascht, aber da ich ja die Chips lesen kann, ist das nicht das Problem, oder?

Falls irgendjemand ne Idee hat, warum Ponyprog spinnt oder AVR-Dude nicht geht: Ich bin fuer jede Hilfe oder Frustbegrenzung dankbar...

Nils

hijacker
13.02.2004, 20:03
Hey Nils,

also bei den Programmern gibt es anscheinend unaufhörlich Probleme (wenngleich meine immer auf Anhieb funktioniert haben in Kombination mit PonyProg).

Wie Jörg schon schrieb kommst Du ohne Spannungsversorgung des Programmers nicht aus.
Du meintest, Du würdest den AVR in den Programmieradapter stecken und hättest letzteren daher modifiziert... ist am Controller der Reseteingang korrekt beschaltet (R/C)? Hast Du auch 100nf an der Spannungsversorgung des µC hängen?

Du könntest auch mal den einfachsten aller Programmieradapter probieren - mit fünf Leitungen und 2 Widerständen (mehr dazu bei mikrocontroller.net). Einige meinen, man könnte damit seinen Port im PC himmeln, aber beim Testen allein dürfte nicht viel passieren. Als Zweit-Programmer tut er's bei mir auch, sogar ohne Widerstände :-)

Jens

Minifriese
13.02.2004, 20:15
Naja, ich hab halt ne kleine Schaltung gebaut, wo die Signale vom 10poligen Stecker auf die entsprechenden Pins des AVRs (bzw des Sockels) gehen. Ist ja soweit ganz einfach. Ich hab auch den Resetpin ueber 10kOhm an 5V haengen und ueber 47pF an Masse. Auch die 100nF zwischen 5V und Masse der Versorgungsspannung sind da. Ich hab mich halt an dem Bildchen orientiert, dass ich weiter oben gepostet habe. Bei mir ist ja bloss der Controller ein anderer und ich hab zehn statt sechs Pole am Stecker. Das ist aber eigentlich wurscht, weil ja die ISP-Anschluesse trotzdem da sind.
Das Teil mit den zwei Widerstaenden hab ich auch schon gesehen, mich aber wegen des empfindlichen Parallelports nicht getraut. Braucht man denn da auch die externe Spannung fuer den AVR? Und welchen Programmer stellst du dann bei Ponyprog ein? Vielleicht trau ich mich ja doch mal. Frust macht mutig...

Uebrigens hat mein AVR-ISP einen Pin, der LED heisst. Das hab ich jetzt so interpretiert, dass ich da ne Leuchtdiode anschliessen kann, die anzeigt, wenn der Adapter gerade programmiert. Hab ich angeschlossen, die LED selber geht auch, hat aber nie geleuchtet, auch nicht beim Schreiben des EEPROMs, was ja anscheinend funktioniert hat. Hat das was zu sagen?

hijacker
13.02.2004, 20:42
Eingestellt habe ich AVR ISP I/O, natürlich parallel LPT1. Sonst nichts.
Ich gehe mal davon aus, dass Du das richtige Device gewählt hast.

Der Parallelport ist nicht wirklich empfindlich, aber falls in der Schaltung etwas gravierend schief geht, ist er halt nicht durch den 244 geschützt.
Aber man braucht immer eine externe Spannungsquelle für den AVR. U.U. könnte auch der Port die Spannung liefern, aber vorgesehen ist das nicht.

Was die LED anbetrifft, habe ich leider keine Ahnung.

Jens

jobee
14.02.2004, 07:32
Hallo Nils,

ich habe mal beim Programmieren die RESET - Leitung gemessen.
Also es liegen dann 0 V +- 10mV an.
Beides getestet mit Parallel - und Serial Adapter an PonyProg.
Einstellung Serial --> SI Prog I/O und Parallel --> AVR Isp I/O wie hijacker.
Bei dir 1 V ? Welche Schaltung vom ISP-Programmer ?

Gruß Jörg

Kjion
14.02.2004, 08:06
-Portzugriff unter Windows: Da ich ja die Chips lesen kann, muss das wohl funktionieren. Damit ist mir wieder voellig unklar, warum der AVR-Dude nicht ging.

Das ist nicht gesagt. Der Fehler "Missing or unkown Device" sagt doch das PonyProg den Chip nicht findet. Klickts du dann auf "ignore" so schreibt PonyProg nur auf gut Glück, das heißt es setzt zwar die Leitungen des Druckerports hat aber keine Rückmeldung vom AVR.
Es könnte zwar funktionieren, aber das ist nicht gesagt.

Und noch ein paar Links dazu:
http://mail.gnu.org/archive/html/avrdude-dev/2003-07/msg00035.html
http://ftp.gnu.org/savannah/files/avrdude/doc/avrdude-html/avrdude_34.html
bzw.
http://ftp.gnu.org/savannah/files/avrdude/doc/avrdude-html/avrdude_toc.html

MfG Kjion

Minifriese
14.02.2004, 08:50
Guten Morgen,

Meine Schaltung sieht prinzipiell genauso aus wie die, die ich weiter oben gepostet habe, bloss dass bei mir ein kleinerer Chip drinsitzt. Aber der hat ja ebenfalls die Anschluesse MISO, MOSI, SCK, RESET und die Versorgung. Die Kondensatoren und Widerstaende sind die gleichen. Ohne Programmierung liegen an Reset auch 5V an. Wie gesagt, beim Programmieren geht dann die Spannung runter, auf etwa 1V, schwankt aber. Wenn ich dann Ponyprog dazu bringe, den Chip zu lesen, geht sie noch weiter runter. Ich hab auch schon 0V gesehen, aber nicht stetig.

@Kjion: Eben weil sich draussen auf dem Board was aendert (Und weil das Lesen zu funktionieren scheint), glaube ich, dass der Port wirklich angesprochen wird. Oder kann es sein, dass Windows zwar den Portzugriff blockiert, dann aber dort selber irgendwas schaltet? Wuerde doch wenig Sinn machen, oder? Das giveio-Teil hat ja auch funktioniert und gibt OK zurueck. Ich versteh's nich...
Der Fehler "Missing or unknown device" kann laut den FAQs von Ponyprog auch heissen, dass der Chip keine Identifikation zurueckgibt. Ich hatte gehofft, das waere der einzige Grund. Aber mir ist gerade eingefallen, dass ich mal so ne Art Parallelport-Tester gebastelt hatte, mit 8 LEDs, die man ueber LPT1 ansteuern kann. Das Teil ging natuerlich bisher bei XP nicht, muesste ja jetzt mit nem einfachen C-Programm funktionieren. Also werd ich mal meine Wohnung umgraben und das Teil suchen.
Aber danke fuer die Hinweise. Ohne haette ich die ganze Sosse schon laengst aus dem Fenster befoerdert ;-)

Nils

Minifriese
14.02.2004, 10:40
Ahaaaaa.

Ich hab jetzt meinen guten alten LPT-Tester (einfach acht LEDs fuer die Datenleitungen des LPT-Ports...) mal angeschlossen und siehe da: Der Port selber geht. Mit dem Teil hinten dran bekomme ich aber genau das gleiche Verhalten von Ponyprog wie beim meinen bisherigen Versuchen, das heisst ich kann "lesen" und das "EEPROM schreiben", jeweils nach dem "Ignorieren". Man sieht an den LEDs sehr schoen, was Ponyprog mit den Leitungen macht. Also hat Kjion teilweise recht: Ich gebe zwar Signale auf die Leitungen, aber der Chip wird nicht gefunden, es werden einfach nur die Leitungen gesetzt, ohne dass wirklich mit dem Chip geredet wird. Muss wohl doch irgendwie an meiner Schaltung liegen...

Nils