ATMega8 nybörjarhjälp
ATMega8 nybörjarhjälp
Jag behöver hjälp med att programmera min ATMega8processor. Jag använder AVRStudio4. Processorn ska skicka ut en textsträng. Behöver jag initiera något och hur gör jag med UART:en? Jag är nybörjare och undrar om någon kunde hjälpa till, gärna med en litet exempel.
Tack på förhand
Tack på förhand
Tack för tipsen
Tack för tipsen Fricke. Jag hittade de datablad du skrev. Men jag har ett litet problem till. Jag har inte så bra koll på AVRStudio4 och vet inte riktigt hur jag skall skriva koden för att erhålla önskad funktion. Några tips eller exempel att ge mig där?
Du kan även kolla på http://www.avrbeginners.net/. Där finns ett exempel på hur man skapar ett nytt projekt i AVRStudio. Du kan också kolla i Acadamy/Articles på http://www.avrfreaks.net, där finns det några komma igång artiklar. Du kanske måste regga dej för att få tillgång till dom.
// RA
// RA
Har börjat klura lite
Hej
Jag har börjat klura lite på en kod själv. Det är bara det att innan koden nedan börjar skicka ut rätt sträng skickar den några andra tecken som jag inte vet vart de kommer från. Kan någon hjälpa mig att komplettera koden eller ge tips på vad det är som är galet
.device ATmega8
.org 0x0000
ldi r30, low(String1)
ldi r31, high(String1)
loop1:
lpm r16, Z+
cpi r16, 0
breq Done
Out 0x18, r16
rjmp loop1
String1:
.db"InterfaceRS232"
Done:
nop
rjmp Done
Jag har börjat klura lite på en kod själv. Det är bara det att innan koden nedan börjar skicka ut rätt sträng skickar den några andra tecken som jag inte vet vart de kommer från. Kan någon hjälpa mig att komplettera koden eller ge tips på vad det är som är galet
.device ATmega8
.org 0x0000
ldi r30, low(String1)
ldi r31, high(String1)
loop1:
lpm r16, Z+
cpi r16, 0
breq Done
Out 0x18, r16
rjmp loop1
String1:
.db"InterfaceRS232"
Done:
nop
rjmp Done
Skulle rekommendera att du börja med C, det är enklare att komma igång och sen vid ett senare gå tillbaka till assembler. Rekomenderar ICC:s kompilator. Det finns även en GCC variant till AVR, har dock inte använt den själv.
Angående koden så kan du kolla på sidan 130 och framåt i databladet för Mega8. Det finns exempel i både C och assembler. Vet att databladen kan vara svårlästa men det är ett måste att läsa om man skall få nåt gjort.
Lite råd
1 sätta upp stackpekaren (glömms ofta bort)
2 ställa in UART hastighet och format. (UBBRH,UBBRL,UCSRB)
3 Slå på Uarten (RXEN mottagning och TXEN sändning i UCSRB registret)
4 Kolla att den förgående tecknet är sänt innan du laddar ett nytt värde (UDRE biten i UCSRA registret).
5 includera "m8def.inc" först i koden så kan du använda namnen på registren i stället för värden.
// RA
Angående koden så kan du kolla på sidan 130 och framåt i databladet för Mega8. Det finns exempel i både C och assembler. Vet att databladen kan vara svårlästa men det är ett måste att läsa om man skall få nåt gjort.
Lite råd
1 sätta upp stackpekaren (glömms ofta bort)
2 ställa in UART hastighet och format. (UBBRH,UBBRL,UCSRB)
3 Slå på Uarten (RXEN mottagning och TXEN sändning i UCSRB registret)
4 Kolla att den förgående tecknet är sänt innan du laddar ett nytt värde (UDRE biten i UCSRA registret).
5 includera "m8def.inc" först i koden så kan du använda namnen på registren i stället för värden.
// RA
Re: Har börjat klura lite
Har för mig det ska vara:Arild skrev: ldi r30, low(String1)
ldi r31, high(String1)
ldi r30, low(String1*2)
ldi r31, high(String1*2)
Eftersom Flashminnet är uppbyggt i words och inte bytes.
Jag skulle nästan säga att det är bra att du lär dig asm först och sedan något språk på högre nivå (C tex), så har du lite koll på vad som händer bakom högnivåspårket.
WinAVR (GCC för AVR under Windows) rekommenderas jag för C iaf. En bra kompilator till ett bra pris.

Det räcker i stort sett med en ATMega8, ett prototypkort (eller annat kopplingsdon), en 2x10-pinnars stiftlist eller IDC-kontakt samt en ISP-programmerare. Koppla upp matningen, se till att du har en "pull-up" på 10-50k till RESET och koppla in programmeringsbenen (MISO, MOSI, SCK, RESET) till rätt stift på stiftlisten (schema finns lite överallt, garanterat på avrfreaks.net eller avrbeginners.net eller googla efter ponyprog).
ATMega-serien har innbyggd RC-oscillator som är igång som default så kristall behövs ej (dock så kommer du inte att kunna köra UARTen speciellt snabbt pga den dåliga frekvensnogrannheten).
Om du nu vill kunna skicka text till datorn (som jag förstod det), så behöver du även en MAX232 eller motsvarande för att konvertera spänningsnivåerna från RX och TX till något som COM-porten på datorn vill ha (RS232).
Om du är lat köper du ett STK från Atmel.
ATMega-serien har innbyggd RC-oscillator som är igång som default så kristall behövs ej (dock så kommer du inte att kunna köra UARTen speciellt snabbt pga den dåliga frekvensnogrannheten).
Om du nu vill kunna skicka text till datorn (som jag förstod det), så behöver du även en MAX232 eller motsvarande för att konvertera spänningsnivåerna från RX och TX till något som COM-porten på datorn vill ha (RS232).
Om du är lat köper du ett STK från Atmel.
Kan detta vara rätt?
Har jag gjort rätt om jag kopplat på följande sätt:
I IDC-kontakten kopplar jag sedan in min AVR ISP.
IDC_kontakt(10 pin) TILL ATmega8(DIL)
BEN 1 MOSI TILL BEN 17 MOSI
BEN 2 VTG TILL +5V
BEN 3 GND TILL(Går ingenstans)
BEN 4 GND TILL JORD
BEN 5 RST TILL BEN 1 RESET*
BEN 6 GND TILL JORD
BEN 7 SCK TILL BEN 19 SCK
BEN 8 GND TILL JORD
BEN 9 MISO TILL BEN 18 MISO
BEN 10 GND TILL JORD
Dessutom har jag kopplat ben 7 Vcc (på ATmegan) till +5V och via en 100 nf kondensator ner till jord. Ben 8 GND till jord.
På IDC-kontakten är GND ben 4,6,8,10 ihopkopplade.
*Till ben 1 reset (på ATmen) har jag kopplat +5V via ett "pull-up" motstånd på 10kohm.
Slutligen så kopplade jag ihop ben 7 Vcc med ben 20 AVcc på ATmen.
Rörig uppställning, jag vet, men det fungerade inte att lägga ut en bild tyvärr...
Hoppas ni kan reda ut det och berätta för mig om jag kan programmera min processor med denna koppling
En liten fråga till: Jag var inne på AVRfreaks och såg en massa inlägg om folk som hade misslyckats pga att de inte hade gjort rätt med sina "fuse"
Är detta något jag behöver bry mig om i mitt lilla projekt?
Tack för alla de bra svar jag fått hittills
I IDC-kontakten kopplar jag sedan in min AVR ISP.
IDC_kontakt(10 pin) TILL ATmega8(DIL)
BEN 1 MOSI TILL BEN 17 MOSI
BEN 2 VTG TILL +5V
BEN 3 GND TILL(Går ingenstans)
BEN 4 GND TILL JORD
BEN 5 RST TILL BEN 1 RESET*
BEN 6 GND TILL JORD
BEN 7 SCK TILL BEN 19 SCK
BEN 8 GND TILL JORD
BEN 9 MISO TILL BEN 18 MISO
BEN 10 GND TILL JORD
Dessutom har jag kopplat ben 7 Vcc (på ATmegan) till +5V och via en 100 nf kondensator ner till jord. Ben 8 GND till jord.
På IDC-kontakten är GND ben 4,6,8,10 ihopkopplade.
*Till ben 1 reset (på ATmen) har jag kopplat +5V via ett "pull-up" motstånd på 10kohm.
Slutligen så kopplade jag ihop ben 7 Vcc med ben 20 AVcc på ATmen.
Rörig uppställning, jag vet, men det fungerade inte att lägga ut en bild tyvärr...

Hoppas ni kan reda ut det och berätta för mig om jag kan programmera min processor med denna koppling
En liten fråga till: Jag var inne på AVRfreaks och såg en massa inlägg om folk som hade misslyckats pga att de inte hade gjort rätt med sina "fuse"
Är detta något jag behöver bry mig om i mitt lilla projekt?
Tack för alla de bra svar jag fått hittills
Kan inte på rak arm svara på om det är rätt kopplat... (Är lite seg i skallen såhär sent)
Men, angående folks misslyckanden:
ATMega-serien har innbyggd RC-oscillator på 1,2,4 eller 8 MHz som kan användas som ersättning till extern kristall för att spara in komponenter i icke-extremt timing känsligsliga applikationer. Typen av oscillator ställs in via olika s.k. FUSE-bits, som kommer default-programmerade för att använda 1 MHz intern RC-oscillator. Dessa bitar ställs in som '0' om de ska vara aktiverade, eller programmerade, och '1' om de ska vara osatte, eller oprogrammerade. Detta har somliga missuppfattat och försökt ställa in oscillator kretsen att använda exter kristall eller intern 8 Mhz-kristall och istället ställt in extern clockpuls, vilket gjort att processorn inte går att använda om man inte har tillgång till en signalgenerator.
Fingrar man inte på FUSE-bitarna, eller helt enkelt skaffar sig koll på vad man sysslar med genom att noggrant läsa denna delen i databladet, så är det dock inga problem.
Av erfarenhet har jag även märkt att AVR-kretsarna är extremt svåra att ha sönder, även om man vänder matningsspänningen. Enda sättet jag har lyckats döda en fullständigt var genom att inte ansluta matningen och driva kretsen på något mysko sätt genom portarna.
Lycka till!
Men, angående folks misslyckanden:
ATMega-serien har innbyggd RC-oscillator på 1,2,4 eller 8 MHz som kan användas som ersättning till extern kristall för att spara in komponenter i icke-extremt timing känsligsliga applikationer. Typen av oscillator ställs in via olika s.k. FUSE-bits, som kommer default-programmerade för att använda 1 MHz intern RC-oscillator. Dessa bitar ställs in som '0' om de ska vara aktiverade, eller programmerade, och '1' om de ska vara osatte, eller oprogrammerade. Detta har somliga missuppfattat och försökt ställa in oscillator kretsen att använda exter kristall eller intern 8 Mhz-kristall och istället ställt in extern clockpuls, vilket gjort att processorn inte går att använda om man inte har tillgång till en signalgenerator.
Fingrar man inte på FUSE-bitarna, eller helt enkelt skaffar sig koll på vad man sysslar med genom att noggrant läsa denna delen i databladet, så är det dock inga problem.
Av erfarenhet har jag även märkt att AVR-kretsarna är extremt svåra att ha sönder, även om man vänder matningsspänningen. Enda sättet jag har lyckats döda en fullständigt var genom att inte ansluta matningen och driva kretsen på något mysko sätt genom portarna.
Lycka till!
- Schnegelwerfer
- Inlägg: 1863
- Blev medlem: 8 november 2004, 13:46:56
Felmeddelande
Sitter nu och försöker programmera min processor med ponyprog. Men jag får bara samma felmeddelande hela tiden: "Device missing or unknown device". Vilken kan vara den troligaste orsaken till detta? Har jag kopplat fel kanske?
Haha arild, det där felmeddelandet fick jag också ett ANTAL ggr när jag försökte bygga min egen AVRISP.. kom ej på vad felet var då.. vet ej nu heller, den har iaf inte kontakt med din programmerare så nåt fel är det!
Något OT:
Man skall alltså ha pull upen inkopplad från Reset till VCC med 10k motstånd även när man skall programmera kretsen ? För just nu har jag endast de när ja kör själva proget i en applikation. När jag programmerar har ja endast kopplat in programmeraren på de rätta I/O portarna och så självklart Vcc och GND
Något OT:
Man skall alltså ha pull upen inkopplad från Reset till VCC med 10k motstånd även när man skall programmera kretsen ? För just nu har jag endast de när ja kör själva proget i en applikation. När jag programmerar har ja endast kopplat in programmeraren på de rätta I/O portarna och så självklart Vcc och GND