ATmega8 über RS232 Programmieren [Bootloader]

#2211647
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
Gast #2211698
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?
#2211738
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?
#2211852
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.
Gast #2211878
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.
#2211884
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.
Gast #2211887
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
Gast #2232624
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
Angehängte Dateien:
Persönliche Seite #2233147
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
Gast #2233161
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.
#2233758
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!
Angehängte Dateien:
#2234441
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren