ATMega16 tappar huvudet efter kodsnutt.
ATMega16 tappar huvudet efter kodsnutt.
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
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
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


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


-
- EF Sponsor
- Inlägg: 2109
- Blev medlem: 27 augusti 2005, 20:57:58
- Ort: Borlänge
SPI Programeringsinterfacet är (AVR ISP with SI-Prog) den under STK200/300 & PonyProg som överförings program.
http://www.lancos.com/prog.html
http://www.lancos.com/prog.html
-
- EF Sponsor
- Inlägg: 2109
- Blev medlem: 27 augusti 2005, 20:57:58
- Ort: Borlänge
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.
Kanske inte ens går att rädda med en "riktig" programmerare då alla fusebitar verkar bli satta.
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?.

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?.
-
- EF Sponsor
- Inlägg: 2109
- Blev medlem: 27 augusti 2005, 20:57:58
- Ort: Borlänge
-
- EF Sponsor
- Inlägg: 2109
- Blev medlem: 27 augusti 2005, 20:57:58
- Ort: Borlänge
-
- EF Sponsor
- Inlägg: 2109
- Blev medlem: 27 augusti 2005, 20:57:58
- Ort: Borlänge
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.

