Forum: Mikrocontroller und Digitale Elektronik USBasp: Von Atmega48 auf Atmega168 portieren


von Rene K. (draconix)


Lesenswert?

Hiho,

ich habe hier noch einige Atmega168 rumliegen. Würde mir gerne mal einen 
USBasp Adapter bauen, leider jedoch... fehlen mir entweder der Atmega48 
oder der Atmega8 (hier habe ich zwar noch 10 Stück da, jedoch die 
Atmega8-8PU also gehen die 12Mhz nicht).

Da sich der Atmega48 und der Atmega168 nur in der Speichergröße 
unterscheiden, müsste man doch eigentlich das Programm portieren können 
oder?

Die aktuelle Firmware:

http://www.fischl.de/usbasp/

Dort ist jedoch nur der Source für den Atmega8 enthalten. Kann ich die 
einfach für den Atmega168 (natürlich auf Atmega168 umstellen) nehmen? 
Oder unterscheiden sich die Register in den beiden µCs - sodas das ich 
Timer etc. via Hand umstellen muß?

von Rene K. (draconix)


Lesenswert?

Noch besser, wie ich gerade sehe... Den USB-AVR-ISP von Ullihome.de - 
Wäre natürlich um welten besser.

von Rene K. (draconix)


Lesenswert?

Niemand einen Tipp parat?

von Thomas E. (thomase)


Lesenswert?

Rene K. schrieb:
> Oder unterscheiden sich die Register in den beiden µCs - sodas das ich
>
> Timer etc. via Hand umstellen muß?

Die unterscheiden sich teilweise im Namen der Register UART >> UART0
aber auch, da die neuen mehr Funktionen haben, in der Anzahl der 
Register für einzelne Peripherien.

mfg.

von Phil J. (sunflower_seed)


Lesenswert?

hallo,

mein USBasp Programmer läuft auch mit nem mega168.
Hab leider die Sourcen schon wieder wegemüllt.
Aber ein Grund mehr das ich im Kopf hab, das es ziemlich einfach war.
ich glaub du musst nur den Timer anpassen.

von Uwe S. (de0508)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe Dir das Programm für den atMega168 mit der aktuellen VUSB Lib 
vom 20100715 übersetzt.

Link: http://www.obdev.at/products/vusb/download.html

Bitte gib uns eine Rückmeldung wenn den usbasp läuft !

Hier noch die Fuse Bits für Brown-Out = 2,7V, somit kann man auch den 
atMega mit 3,6V betreiben.
1
avrdude <programmer> -p atmega168 -U lfuse:w:0xdf:m -U hfuse:w:0xdd:m -U efuse:w:0xf9:m

.

von Charly B. (charly)


Lesenswert?

Rene K. schrieb:
> Hiho,
>
> oder der Atmega8 (hier habe ich zwar noch 10 Stück da, jedoch die
> Atmega8-8PU also gehen die 12Mhz nicht).

i wette a Kasten Bier das die auch mit 12 Mhz laufen

vlG
Charly

von Rene K. (draconix)


Lesenswert?

Uwe S. schrieb:
> Hallo,
>
> ich habe Dir das Programm für den atMega168 mit der aktuellen VUSB Lib
> vom 20100715 übersetzt.
>
> Link: http://www.obdev.at/products/vusb/download.html
>
> Bitte gib uns eine Rückmeldung wenn den usbasp läuft !
>
> Hier noch die Fuse Bits für Brown-Out = 2,7V, somit kann man auch den
> atMega mit 3,6V betreiben.
> avrdude <programmer> -p atmega168 -U lfuse:w:0xdf:m -U hfuse:w:0xdd:m -U 
efuse:w:0xf9:m
> .

Vielen lieben Dank! Komme erst heute Abend dazu dies zu testen - werde 
aber auf jeden Fall rückmeldung geben!

Charly B. schrieb:
> i wette a Kasten Bier das die auch mit 12 Mhz laufen
>
> vlG
> Charly


Ok, die Wette steht :D werde ich dann heute Abend auch mal probieren.

von Rene K. (draconix)


Angehängte Dateien:

Lesenswert?

Rene K. schrieb:
> Ok, die Wette steht :D werde ich dann heute Abend auch mal probieren.

Hast deine Wette gewonnen ;)

Aber nicht alle gingen. Einer von fünf hat sich geweigert laufen zu 
wollen :D

Uwe S. schrieb:
> Bitte gib uns eine Rückmeldung wenn den usbasp läuft !

Werde ich noch tun, komme aber heute leider nicht mehr dazu das zum 
zusammenlöten. Mache ich morgen denne.

Übrigens... Neben dem USB-ISP liegt ein TinyISP.

von Rene K. (draconix)


Lesenswert?

Uwe S. schrieb:
> Hallo,
>
> ich habe Dir das Programm für den atMega168 mit der aktuellen VUSB Lib
> vom 20100715 übersetzt.
>
> Link: http://www.obdev.at/products/vusb/download.html
>
> Bitte gib uns eine Rückmeldung wenn den usbasp läuft !
>
> Hier noch die Fuse Bits für Brown-Out = 2,7V, somit kann man auch den
> atMega mit 3,6V betreiben.
> avrdude <programmer> -p atmega168 -U lfuse:w:0xdf:m -U hfuse:w:0xdd:m -U 
efuse:w:0xf9:m
> .

Dein Hex arbeitet tadellos... Danke dir!

von 777777 (Gast)


Lesenswert?

Each Interrupt Vector occupies two instruction words in ATmega168, and 
one instruction word in ATmega48 and ATmega88.

ATmega48 does not have a separate Boot Loader Section. In ATmega88 and 
ATmega168, the Reset Vector is affected by the BOOTRST fuse, and the 
Interrupt Vector start address is affected by the IVSEL bit in MCUCR.

ATmega168 has insruction JMP and CALL 88 and 48 have not.

Sorry if I understand your question wrong.

von Rene K. (draconix)


Lesenswert?

777777 schrieb:
> Sorry if I understand your question wrong.

No, you dont misunderstood my question. ;)

777777 schrieb:
> Each Interrupt Vector occupies two instruction words in ATmega168, and
> one instruction word in ATmega48 and ATmega88.

Oh... thats sounds intressting! I doesnt know that. Where i can find 
that info in the datasheet to verify it?

von Uwe S. (de0508)


Lesenswert?

Hallo Rene,

die Info ist im Datenblatt zum "ATmega48, ATmega88, and ATmega168"

unter "2.2 Comparison Between ATmega48, ATmega88, and ATmega168" auf 
Seite 6f

zu finden.

Aber stört uns das ? Nein, den der C Compiler regelt das für uns.

- http://www.atmel.com/dyn/resources/prod_documents/doc2545.pdf


.

von Michael (c0d3z3r0)


Lesenswert?

Hat schon jemand den usbasp mit einem atmega168PA zum laufen gekriegt?
Meiner mag nicht :( Ich hab statt den Zener-Dioden einfach VCC auf 3,0V 
mit nem Low-Drop geregelt. Wird aber leider nicht erkannt.

von Charly B. (charly)


Lesenswert?

Rene K. schrieb:
> Rene K. schrieb:
>> Ok, die Wette steht :D werde ich dann heute Abend auch mal probieren.
>
> Hast deine Wette gewonnen ;)

@Rene K.
und du alter Schuldenbuckel.... mei Kasten Bier hab i bis
heute noch nicht, soviel zum Thema Wettschulden & Ehrenschulden :P

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

777777 schrieb:
> Each Interrupt Vector occupies two instruction words in ATmega168, and
> one instruction word in ATmega48 and ATmega88.
>
> ATmega48 does not have a separate Boot Loader Section. In ATmega88 and
> ATmega168, the Reset Vector is affected by the BOOTRST fuse, and the
> Interrupt Vector start address is affected by the IVSEL bit in MCUCR.
>
> ATmega168 has insruction JMP and CALL 88 and 48 have not.


Uwe S. schrieb:

> Aber stört uns das? Nein, den der C Compiler regelt das für uns.

Vorsicht, so einfach ist's auch wieder nicht weil das USB-Device 
komplett in Software steht, und zwar großteils in Assembler mit von Hand 
ausgelesenen und auf Tick exakt abgezälten Instruktionen.

Ich hab daher aufgegben den Code anzupassen; allerdings wollte ich an 
einen anderen Quarz anpassen, nicht an einen anderen µC.

Die meisten Instruktionen haven zwar das gleiche Timing aber wenn man 
ein
 
1
sbrc  r0, 0
2
rjmp  .L0
 
ersetzt durch
 
1
sbrc  r0, 0
2
jmp   .L0
 
hat man bereits ein anderes Timing.

von Michael (c0d3z3r0)


Lesenswert?

Johann L. schrieb:
> Ich hab daher aufgegben den Code anzupassen; allerdings wollte ich an
> einen anderen Quarz anpassen, nicht an einen anderen µC.

Quarze werden doch einige unterstützt. 12 MHz, 12.8 MHz, 15 MHz,
16 MHz, 16.5 MHz 18 MHz and 20 MHz.

Hat jemand ne Idee zu meinem Problem?  Weder der Code oben, noch der 
originale von fischl.de funktioniert. Wird als USBasp erkannt, vid und 
pid sind richtig, aber avrdude meckert:
1
avrdude: error: could not find USB device "USBasp" with vid=0x16c0 pid=0x5dc

µC ist der Atmega168PA.


Der usbasp, den ich auf e....de gekauft hab funktioniert einwandfrei 
(atmega88).

Danke!

von Michael (c0d3z3r0)


Lesenswert?

Okay, Problem gelöst.

Der Fehler war: eigene Blödheit. Ich hab vergessen, die 
Selfprogram-Brücke (bei der gesteckten version nur ein Draht^^) 
rauszunehmen. Dass avrdude den usbasp nicht erkennt, wenn er sich selbst 
resettet ist ja logisch :S

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.