Sida 1 av 1

ATMega16 tappar huvudet efter kodsnutt.

Postat: 7 mars 2008, 19:03:34
av Fagge
Jag har precis lött ihop ett testkort med en Mega16 för att för andra gången lära mig AVRns assembler språk, vilket skiljer en del från HC11an som jag tidigare har jobbat med.
Hur som helst, så är alla I/O pinnar utdragna till stiftlister med lysdioder i serie med 1K motstånd till Vcc. En 16MHz kristall med tillhörande kondningar är monterade & lika så en MAX232 krets.

Kortet funkar fint det lilla jag har testat hitintills.
I går när jag började knappla lite, så fick jag inte subbrutiner att köras. Detta berodde på att jag hade glömt att ange startadressen för stackpekaren till RAMEND.
Så ut på nätet & högg första bästa kodsnutt & klistrade in den i mitt lilla blink program.
Efter att ha laddat ner koden i processorn så ballade µcn ur så pass att jag inte kan programmera om den.
Ponyprog säger DeviceMissing.
Efter att ha kliat hål i huvudet, så bytte jag kretsen i hopp om att det var ESDn som hade tagit kretsen. Men efter att ha laddat ner samma mjukvara i den nya kretsen så blev den också helt hjärn död.

Jag har inte rört några fusebitar.

Är det någon som har några idér om vad fasen det är som händer?.

Det är kodsnutten nedan som ställer till det. & den är tänkt att blinka växelvis mellan Port C & D i väldigt snabb takt.


.include "m16def.inc"

.def Temp = R16 ;Gives "Defines" Register R16 the name Temp

//--- Interrupt Vector -------------------------------------------------
.org 0x0000
RJMP MAIN

MAIN:

ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16

//--- Init --------------------------------------------------------------
Init_PORTC:
ldi r16, 0b11111111 ; Sätt Port C & D som utgång
out DDRC, r16
out DDRD, r16
//--- Main --------------------------------------------------------------

LOOP1:

ldi r16, 0xFF ; Ladda R16 med talet FF Och mata ut det till
out PORTC, r16 ; PORTC
rcall delay
ldi r16, 0xFF ; Ladda R16 med talet FF Och mata ut det till
out PORTD, r16 ; PORTD
rcall delay
ldi r16, 0x00 ; Ladda R16 med talet 00 Och mata ut det till
out PORTC, r16 ; PORTC
rcall delay
ldi r16, 0x00 ; Ladda R16 med talet 00 Och mata ut det till
out PORTD, r16 ; PORTD
rcall delay
rjmp Loop1


//----DELAY---

DELAY:


ldi R16, 255
DELAY_MS1: ;
dec R16
brne DELAY_MS1
ret

Postat: 7 mars 2008, 21:06:45
av Fagge
Alltså är det ens möjligt programmera sönder en krets, under förutsättning att man inte har något aktivt kopplat mot I/O pinnarna?.
Och direkt efter en reset så ska väll datorn kunna komma åt booten & ta över via SPI.? Den funktionen ska man väll inte kunna råka programmera bort av misstag, såvida man inte pillar på fuse bitarna?.

Programsnutten har jag stegat mig igenom i AVRstudio & det verkar ju inte vara något fel på den.

Föresten µcn ska väll köra med sin egen RC klocka, såvida man inte har angett något annat, trots att man har en extern kristall kopplad till µcn?
Den externt monterade kristallen stör väll inte den inbyggda RC oscilatorn?

Ett par bilder på eländet…

Bild
Bild

Postat: 7 mars 2008, 22:07:33
av thepirateboy
Det intressanta är nog att hur programmeringsinterfacet är kopplat. ISP, JTAG ?

Postat: 7 mars 2008, 23:06:05
av Fagge
SPI Programeringsinterfacet är (AVR ISP with SI-Prog) den under STK200/300 & PonyProg som överförings program.
http://www.lancos.com/prog.html

Postat: 8 mars 2008, 11:58:00
av Fagge
Efter att ha läst runt på diverse forum, så verkar som att det är en bugg i senare versioner av ponyprog, & den fibblar ibland till fusebitarna & skrotar kretsen = Jävligt kul :evil:

Så efter att ha bytt krets igen & installerat V2,05 av PP, så verkar det fungera…

Postat: 8 mars 2008, 12:21:25
av thepirateboy
Kanske detta då http://ponyprog.sourceforge.net/phorum/read.php?2,558

Kanske inte ens går att rädda med en "riktig" programmerare då alla fusebitar verkar bli satta.

Postat: 8 mars 2008, 12:48:16
av bos
Fagge skrev:den fibblar ibland till fusebitarna & skrotar kretsen = Jävligt kul :evil:
Urk.

Jag är glad att jag fortfarande kör THT och socklar...

Postat: 8 mars 2008, 13:01:50
av Icecap
Och jag trivs med att bara behöva en serieport och att det finns inbyggd bootloader i Renesas, ingen fusebits eller skit, bara ett 56 bit lösenord som inte används till att börja med.

Postat: 8 mars 2008, 13:13:09
av Fagge
Någon som har en ”riktig programmerare”, dit jag skulle kunna skicka dom 2 kretsarna. Så kan ni testa att låsa upp dom. Skulle det funka så kan jag bjuda på den ena!. :)

Föresten Jtag interfacet verkar vara akivt, eftersom jtagens pinnar är dragna med dom interna pullupp motstånden, ser jag på lysdioderna. Så det kanske finns lite hopp?.

Postat: 8 mars 2008, 13:24:20
av thepirateboy
Skicka hit dom du alternativt du lånar en programmerare. Jag har både JTAGICE mkII, AVRISP mkII, AVR Dragon och STK200. Om inte något av detta funkar så är det nog kört...

Postat: 8 mars 2008, 13:27:47
av Fagge
Härligt, PMa mig din adress så postar jag dom på måndag!.

Postat: 8 mars 2008, 14:23:24
av cykze
thepirateboy: Eftersom fuse-bitarna verkar ha blivit helt fel satta så kommer nog inte ISP-programmering fungera. Parallellprogrammering är väl den metod som har störst chans att fungera. Fixar någon av dina programmerare det?

Fast det är möjligt att JTAG kan fungera också.

Postat: 8 mars 2008, 14:31:49
av thepirateboy
Dragonen ska klara PP enligt specen. Tänkte börja att testa med JTAG annars får det väl bli PP även om det är lite bökigt.

Postat: 12 mars 2008, 21:27:51
av thepirateboy
Fusebitarna var mycket riktigt satta till 0x00 0x00. Det gick dock att få kontakt och läsa Device signature med JTAG. Fusebitarna gick inte att programmera, utan var låsta till 0x00 0x00. Jag gjorde då en erase av kretsen och sedan var det inga problem. Gjorde ett litet program som blinkar en diod för verkligen kolla att kretsen funkar. Ska kolla den andra kretsen imorrn.

Bild

Postat: 12 mars 2008, 21:58:54
av Fagge
Härligt, stort tack till thepirateboy, som orkar krabba med sånt!.