Forum: Mikrocontroller und Digitale Elektronik ATmega8 über RS232 Programmieren [Bootloader]


von Denny W. (dennyweinberg) Flattr this


Lesenswert?

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

von holger (Gast)


Lesenswert?

>"cl.ly/..." sind Links von CloadApp.

Und da werden sie vermutlich ungelesen verhungern.

von Denny W. (dennyweinberg) Flattr this


Angehängte Dateien:

Lesenswert?

Na dann hab ich mal schnell die Bilder hochgeladen.

von 2ter Gast (Gast)


Lesenswert?

Mal ein Gegenvorschlag.
Bootloader waren schon häufig Thema. Einfach mal danach suchen. Es gibt 
sogar hier Artikel darüber.

von NopNop (Gast)


Lesenswert?


von Wilhelm F. (Gast)


Lesenswert?

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?

von NopNop (Gast)


Lesenswert?

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

von Denny W. (dennyweinberg) Flattr this


Lesenswert?

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?

von Purzel H. (hacky)


Lesenswert?

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.

von Denny W. (dennyweinberg) Flattr this


Lesenswert?

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?

von Purzel H. (hacky)


Lesenswert?

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.

von Michael A. (Gast)


Lesenswert?

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.

von Denny W. (dennyweinberg) Flattr this


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

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

von Denny (Gast)


Angehängte Dateien:

Lesenswert?

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

von Peter D. (pdiener) Benutzerseite


Lesenswert?

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

von Denny Weinberg (Gast)


Lesenswert?

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.

von Denny W. (dennyweinberg) Flattr this


Lesenswert?

Noch eine Frage: Muss man vor dem Kompilieren irgendwo die Baudrate 
einstellen?
Bisher habe ich nur die Quarzfrequenz eingestellt und es mit 9600 
versucht.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Welche Version vom Bootloader ist denn das?

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Hier steht eigentlich alles Wichtige:
http://www.mikrocontroller.net/articles/AVR_Bootloader_FastBoot_von_Peter_Dannegger

Die Baudrate wird automatisch ermittelt.

von Denny W. (dennyweinberg) Flattr this


Lesenswert?

Danke! Werds mal testen. Ich meine ich hab die Version 2.1.

von Denny W. (dennyweinberg) Flattr this


Lesenswert?

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.

von Denny W. (dennyweinberg) Flattr this


Lesenswert?

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.

von Denny W. (dennyweinberg) Flattr this


Angehängte Dateien:

Lesenswert?

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!

von Denny W. (dennyweinberg) Flattr this


Lesenswert?

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.

von Denny W. (dennyweinberg) Flattr this


Lesenswert?

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
Noch kein Account? Hier anmelden.