Hallo. Vor einem halben Jahr habe ich ein Projekt begonnen, was ich "Schwebender Magnet" nannte. Gemeint ist diese Konstruktion hier: (Link) cl.ly/7K0T Lief mit einem ATmega8, höhneverstellbar per Fernbedienung oder PC-Software: cl.ly/7Jjb Doch um die Funktion geht es nicht. Das Problem ist, dass ich den ATmega immer aus der Platine raus nehmen muss um ihn zu programmieren. Das nervt mit der Zeit. Jetzt möchte ich ihn gerne per RS232 Schnittstelle programmieren können: cl.ly/7Jqx Hier mal der Schaltplan: cl.ly/7Jz1 Und die Platine: cl.ly/7K6n Zum Programmieren habe ich so en MyAVR Board: http://shop.myavr.de/pic/articles/board_usb_mit_lichtsensor_g.png Um den ATmega8 per RS232 programmieren zu können muss ein Bootloader im ATmega laufen, der das Programm per RS232 aufnimmt, soweit ich das verstanden habe. Habe auch ein paar im Internet gefunden, weiss aber nicht so recht, wie ich mich dan anstellen muss. Könnt ihr mir vielleicht ein bisschen helfen? P.S.: Programmiert wurde eine PD-Regelung in Bascom. "cl.ly/..." sind Links von CloadApp. Ich bitte um Hilfe und wäre sehr Dankbar! :-) MfG Denny
>"cl.ly/..." sind Links von CloadApp.
Und da werden sie vermutlich ungelesen verhungern.
Na dann hab ich mal schnell die Bilder hochgeladen.
Mal ein Gegenvorschlag. Bootloader waren schon häufig Thema. Einfach mal danach suchen. Es gibt sogar hier Artikel darüber.
Das hier schon gesehen: http://www.mikrocontroller.net/articles/AVR_Bootloader_FastBoot_von_Peter_Dannegger bzw. der Artikel: Beitrag "UART Bootloader ATtiny13 - ATmega644" Grüße
Für RS232 gab es in der Vergangenheit schon viele Bootloader. Gelegentlich arbeite ich mit dem EMON51 für 8051. Den gibts irgendwo im Internet sicherlich auch. Der lädt allerdings den Code in RAM, nicht in Flash. Ist zwar ein anderer Assemblercode, nämlich für 8051, aber vielleicht kann man sich da was abschauen. Und selbst wenn der nicht direkt ins Flash schreibt: Da gibt es sicher Möglichkeiten, den Code bei genügend RAM am Ende ins Flash zu brennen. Und was ist hier mit der Codesammlung im Forum? Gibt es da nichts?
Wilhelm Ferkes schrieb: > Und was ist hier mit der Codesammlung im Forum? Gibt es da nichts? Habe doch oben schon einen von Peter Dannegger angegeben. Aber hier nochmal der Link allgemein über Bootloader: http://www.mikrocontroller.net/articles/Bootloader
Danke an alle! Bin mittlerweile so weit, dass ich die ASM Datei kompiliert habe.
1 | ;************************************************************************* |
2 | ; * |
3 | ;* ATmega8 Bootloader * |
4 | ;* * |
5 | ;* Author: Peter Dannegger * |
6 | ;* * |
7 | ;************************************************************************* |
8 | .nolist |
9 | .include "m8def.inc" |
10 | |
11 | |
12 | ;please burn this BootStart Fuse: |
13 | |
14 | .equ BootStart = SecondBootStart |
15 | |
16 | |
17 | ;Attention: BufferSize must fit perfectly into BootStart ! |
18 | ;e.g. BufferSize * 8 = BootStart |
19 | |
20 | .equ BufferSize = (15*PageSize) |
21 | |
22 | ;------------------------------------------------------------------------- |
23 | ; Port definitions |
24 | ;------------------------------------------------------------------------- |
25 | .equ STX_PORT = PORTD |
26 | .equ STX_DDR = DDRD |
27 | .equ STX = PD1 |
28 | |
29 | .equ SRX_PIN = PIND |
30 | .equ SRX_PORT = PORTD |
31 | .equ SRX = PD0 |
32 | ;------------------------------------------------------------------------- |
33 | .include "fastload.inc" |
34 | ;------------------------------------------------------------------------- |
Das ist der Inhalt. Kompilieren hat geklappt. Habe nun die Hex Datei. Hänge aber jetzt bei avrdude fest. Oder funktioniert das auch mit FBOOT?
Ein Bootloader fuer den Mega8 wird einiges an Flash brauchen, dass dann nachher fehlen kann. Etwas einfacher ist das Programmieren per ISP, das ist die SPI Schnittstelle. Einfach mal in das Datenblatt schauen.
Ich möchte es aber versuchen. Ich habe die Hex Datei nun per AVR Prog Tools in den ATmega geladen. Kann mir jemand sagen, was ich jetzt genau machen muss, um ihn per RS232 zu programmieren?
Du ahst den bootloader programmiert ? Nun, dann sollte im Manual dazu stehen wie der ablaeuft. Meine Bootloader haben beim powerup eine taste abgefragt, und dann im Bootloader gewartet. Andere moegen eine gewisse Zeit im Bootloader warten. Auf alle Faelle muss man das dazu passende "Bootloaderprogramm" aufm PC ausfuehren. Was auch immer das ist.
Oktal Oschi schrieb: > Ein Bootloader fuer den Mega8 wird einiges an Flash brauchen, dass dann > nachher fehlen kann. Das läßt sich klären. Der Bootloader von Peter braucht auf dem ATmega8 so um die 500 Bytes. Und wenn der Flash knapp wird, läßt sich prima der ATmega168 als größerer Bruder verwenden.
Also ich habe den Bootloader mittlerweile im ATmega8 drin. Jetzt soll man im Grunde den Befehl eingeben: FBOOT /B9600 /D M8TEST.hex Brennen über COM1 mit 9600 baud und die M8TEST.hex Datei bringt en LED zum leuchten. Dann soll man den ATmega resetten sodass der Bootloader mit dem FBOOT kommunizieren kann denk ich mal. (Der wartet ja am Anfang ein bisschen) Leider passiert aber nichts. Nun fällt mir gerade ein, dass man noch einige Fusebits änern muss. Hab ich ganz vergessen. Egal ich hab jetzt wieder alles weggeräumt bin nämlich mitten in den Prüfungen (Informatikstudent) und werde das Projekt in den Sommerferien (noch 2 Wochen) weiterführen. Danke an alle. Ich habe das Prinzip schon mal verstanden. Ich melde mich dann in 2 Wochen noch mal.
Hi >Das läßt sich klären. Der Bootloader von Peter braucht auf dem ATmega8 >so um die 500 Bytes. Und wenn der Flash knapp wird, läßt sich prima der >ATmega168 als größerer Bruder verwenden. Der Atmega168 ist aber nicht der größere Bruder vom ATMega8. Eher ein ferner Verwandter. MfG Spess
So ich bin wieder da. Also ich haben den ATmega8 jetzt mit dem Bootloader befüllt. Ich benutze diesen hier: Beitrag "UART Bootloader ATtiny13 - ATmega644" In der Datei FASTLOAD.h habe ich folgendes geschrieben/ersetzt: .equ XTAL = 14745600 Dies ist mein Quarz. Alles Kompiliert und übertragen, findet mein PC den ATmega aber nicht. In der Konsole schreibe ich folgendes: FBOOT /B9600 /D /C2 M8TEST.hex Aber der findet ihn nicht. Die Fusebits sind im Anhang. Woran kann das liegen? Danke! Denny
Stimmen die Fuseeinstellungen für das Quarz? Wenn nicht, dann stimmt die Baudrate nicht. -> High frequency Crystal Oscillator einstellen. Stimmt die COM-Port Nummer? Antwortet der Bootloader, wenn man ihn von Hand mit dem Terminal anspricht? Funktioniert der COM-Port? Mit einem Loopbacktest mit einem Terminal findet man das heraus. Grüße, Peter
Die Fuseeinstellungen für den Quarz stimmen auf jeden Fall, da ein anderes Programm im ATmega8 mit dem PC kommunizieren kann. Der COM Port simmt auch, aber welchen Befehl muss ich senden, damit der Bootloader mir eine Antwort gibt? Diesen "Loopbacktest" werde ich mal durchführen.
Noch eine Frage: Muss man vor dem Kompilieren irgendwo die Baudrate einstellen? Bisher habe ich nur die Quarzfrequenz eingestellt und es mit 9600 versucht.
Hier steht eigentlich alles Wichtige: http://www.mikrocontroller.net/articles/AVR_Bootloader_FastBoot_von_Peter_Dannegger Die Baudrate wird automatisch ermittelt.
Danke! Werds mal testen. Ich meine ich hab die Version 2.1.
Ich habe jetzt alles so gemacht, wie es da beschrieben ist. Allerdings ist diese Zeile falsch denke ich: .equ BootDelay = XTAL / 3 ; 0.33s Das sind ja keine 0.33s mehr bei 14,7456 MHz. Irgendwie dreht der in der Konsole nur rund und findet den Mikrocotroller nicht.
Also am Mikrocontroller (RxD) habe ich c.a. 2V wenn das Programm FBOOT läuft und sonst 5V. Das heisst es kommt schon mal was an, bzw. er versucht ihn zu erreichen.
Oh yes! Er verbindet sich mittlerweile. Hatte wohl nicht die passenden Version von FBOOT.exe. Allerdings kommt jetzt CRC error. Woran kann das liegen? Danke! Denny EDIT: Es klappt mit einer anderen Baudrate! Mal testen ob das Programm jetzt läuft. EDIT2: Hmm anscheinend hat er das Programm geschrieben: COM 2 at 115200 Baud: Connected Bootloader V2.1 Target: 1E9307 ATmega8 Buffer: 960 Byte Size available: 7680 Byte CRC: o.k. Elapsed time: 0.27 seconds Aber das Programm läuft nicht, denn dann würde eine LED blinken!
Ich habe nun mal den Zustand verglichen, wenn ich nur den Bootloader schreibe, und den Zustand nachdem ich das andere Programm per FBOOT ebenfalls übertragen habe. Und im Flash ist genau das gleiche drin. Da stimmt irgendwas nicht ganz.
Keiner ne Idee? :-( Komme irgendwie nicht weiter: Als Beispiel habe ich folgendes Programm genommen:
1 | 'ATmega8 |
2 | $regfile = "m8def.dat" |
3 | $crystal = 14745600 |
4 | |
5 | Config Portb.0 = Output |
6 | Do |
7 | Portb.0 = 1 |
8 | Wait 1 |
9 | Portb.0 = 0 |
10 | Wait 1 |
11 | Loop |
Müsste ja eigentlich funktionieren, denke ich. EDIT: Habe nun noch ein Print mit der Baudrate eingefügt aber bei hterm kommt nichts an.
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.