Nybörjare med AVR - försöker komma igång

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
ronnylov
Inlägg: 987
Blev medlem: 23 februari 2012, 12:06:19
Ort: Borås

Nybörjare med AVR - försöker komma igång

Inlägg av ronnylov »

Hej!

Jag har nu fått hem mina prylar från electrokit samt en USBasp AVR-programmerare från ebay (till det fantastiska priset 31 kr inklusive frakt från HongKong).

Jag kör Arch Linux 64-bit på min dator så jag har börjat med att installera de verktyg jag tror kan behövas:

Kod: Markera allt

sudo pacman -S avr-gcc avr-libc avr-binutils avrdude eclipse
Visserligen kanske det hade räckt med avr-libc och avrdude (avr-libc har beroende till avr-gcc som i sin tur har beroende till avr-binutils såde hade nog kommit med på köpet).

Valde lägga in eclipse bara för att kunna följa guiden på chalmers robotförening:
http://crf.nu/wiki/artiklar/eclipse_linux
Lade även in c/C++ och avr-plugin i eclipse allt enligt guiden.

Jag har köpt två AVR-processorer, en ATMega328P-PU och en ATMega1284P-PU. Valde att försöka börja med 328P.

Första intrycket av eclipse är att det verkar en aning "bloatat" och en lie segt i menyerna, men det är väl att förvänta sig när det kör en massa java-kod antar jag. Massor av flikar och menyer som man kan gå vilse i. Jag har programmerat litegrann i C innan för att köra på datorn och då använder jag geany som editor och kompilerar via kommandoraden. Förhoppningsvis är detta möjligt även med avr-gcc och avrdude istället för att gå omvägen via eclipse, men å andra sidan kan det vara lättare att komma igång om man har ett GUI. Jag ska testa alternativen längre fram.

USBasp programmerare fanns med i listan så allt ser bra ut så här långt. Gick väl bra att följa guiden tills det var dags att kompilera. Uppenbarligen hade jag missat ändra till release istället för debug trots att jag tyckte jag hade gjort det redan men jag kanske hade missat knappen "Apply" eller så måste man ändra på flera ställen (tyckte det var möjligt att ställa om på minst 2 olika ställen i GUI). Sedan fick jag varningar om att symboler inte fanns och då visade det sig att jag var tvungen att välja rätt processor också på två olika ställen (eller så hade jag missat apply-knappen). Jaja, så småningom kompilerade det utan problem och det skapades en fil med ändelsen .elf. Borde det inte bli .hex? Jaja, det kanske kvittar...

Nu har jag kommit till steget att koppla in min mikroprocessor på min labbplatta. Verkar som man kan koppla in lysdioder till utgångarna på olika sätt, antingen via ett seriemotstånd från +5V till utgången och då borde det väl lysa om man sätter utgången låg (känns lite bakvänt men kanske detta är att föredra av någon anledning). Eller så kopplar man lysdidoden från utgången till GND via seriemotstånd så lyser den när utgången är hög. Jag har vanliga röda små diffusa 3 mm lysdioder. Känns som att ett seriemotstånd på >150 Ohm skulle passa för att inte överstiga 20 mA. Kanske 330 Ohm eller något sådant? Labbade lite med lysdioderna löst häromdagen och de verkar lysa även med betydligt lägre strömmar än 20 mA. Kanske 470 Ohm då så borde det bli sisådär 6-7 mA genom lysdioden?

Kollade databladet för ATMega328P och den verkar ha två olika ben som är GND. Måste/bör man ansluta båda dessa till GND? Är de sammankopplade internt så om jag ansluter GND till ena benet kan jag utnyttja andra GND-benet som signaljord utan att ansluta till extern jord? Känns instinktivt onödigt att skicka strömmen från andra komponenter igenom mikroprocessorn om man inte måste så jag gissar man lämpligen ansluter båda GND till minus på matningen.

Min AVR-programmerare ser väldigt lik ut den i den här artikeln:
http://chuckontech.com/?p=110

Jag har alltså en flatkabel med en 10-polig kontakt på i ändan. Finns det lämpliga socklar att köpa för denna kontakt så jag kan plugga in den i min breadbord (antagligen vill jag köra mjuka lösa sladdar med hårda stift som är lätta att rycka ner i kopplingsdäcket). Mitt kopplingsdäck är detta:
http://www.electrokit.com/kopplingsdack ... atta.45663

När det gäller anslutning av USBasp-kontakten, hur vet jag från vilket håll man ska titta när det gäller numreringen av anslutningarna i kontakten? Man skulle ju kunna titta in i kabeln, eller så tittar man in i den kontakten man ansluter den till. Antar att det är säkrast att mäta upp den med multimeter (den kommer väl om någon vecka från Kina, har köpt en multimeter från ebay). Känns lite handikappat utan några mätinstrument för tillfället...

Hur gör man med icke anslutna ingångar? Har för mig när jag labbade sist med mikroprocessorer runt 1990 så skulle man köra med 10 kOhm pullup-motstånd från varje ingång till +5V. Men dessa kanske är inbyggda i mikroprocessorn numera? Och ingångarna verkar ju även kunna vara utgångar eller andra saker beroende på hur man konfigurerar dem så jag gissar det är viktigt att initiera dem rätt.

Sedan ska man skicka upp programmet till mikroprocessorn. Det kan man nog göra via eclipse (men vill nog köra manuellt via avrdude på kommandoraden eller med script så småningom). Men tydligen är det viktigt att ställa fuses rätt läste jag. Var hittar man bra guider om detta? Tänkte börja testa utan extern kristall.

Jaja, det löser sig väl. Känns som en liten tröskel det här med inkopplingen samt att skicka över programmet till mikroprocessorn... Hade varit kul att bara få några lysdioder att blinka till att börja med.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Nybörjare med AVR - försöker komma igång

Inlägg av sodjan »

> antingen via ett seriemotstånd från +5V till utgången och då borde det väl lysa om man sätter utgången låg

Ja, det är det vanliga sättet. Normalt har CMOS utgånger lite bättre drivförmåga som "låg".
Eller "driv" är fel ord, "drain" är det engelska uttrycket vilket närmast betyder "suga in" eller så...

> (känns lite bakvänt...

Det är bara just det , en känsla. Det fungerar dock utmärkt.

> Känns som att ett seriemotstånd på >150 Ohm skulle passa för att inte överstiga 20 mA. Kanske 330 Ohm eller något sådant?

Kör med 1 Kohm eller liknande. Fungerar utmärkt. Många gör den tankevurpan att
de tror att men *måste* ligga på (eller nära) 20 mA.

> Labbade lite med lysdioderna löst häromdagen och de verkar lysa även med betydligt lägre strömmar än 20 mA.

Moderna lysdioder fungerar (d.v.s att de "syns") vid 1-2 mA.

> Måste/bör man ansluta båda dessa till GND?

Ja.

> Är de sammankopplade internt så om jag ansluter GND till ena benet kan jag utnyttja
> andra GND-benet som signaljord utan att ansluta till extern jord?

Där hänger jag inte med...

> Hur gör man med icke anslutna ingångar?

Allt utom att lämna dom som "öppna ingångar".
Sätt som utgångar eller pullup.

> Var hittar man bra guider om detta [fuses] ?

Dokumentationen/databladet ?
Sen så finns det säkert massor av träffar på uttryck som "AVR fuses" och "bricked AVR"
på Google. Men det borde finnas någon intro hos Atmel också...
niklo
Inlägg: 150
Blev medlem: 16 september 2009, 11:46:48
Ort: Norrköping

Re: Nybörjare med AVR - försöker komma igång

Inlägg av niklo »

> Är de sammankopplade internt så om jag ansluter GND till ena benet kan jag utnyttja
> andra GND-benet som signaljord utan att ansluta till extern jord?
nej, man ska koppla ihop dem!
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Nybörjare med AVR - försöker komma igång

Inlägg av snigelen »

och för att köra med intern RC-oscillator behöver du inte ändra några fuses då den används per default. Default är även att klockan delas med 8, så den kör alltså i 1MHz. Tycker man det är för långsamt så behöver du ändå inte ändra några fuses, utan detta kan ändras med, typ

Kod: Markera allt

#include <avr/io.h>
#include <avr/power.h>

int main(void)
{
   // Set system clock prescaler to 1 for 8MHz if internal RC-oscillator is used.
   clock_prescale_set(clock_div_1);
   ....
}
Johanb
Inlägg: 3406
Blev medlem: 26 mars 2006, 22:26:12
Ort: Smedjebacken

Re: Nybörjare med AVR - försöker komma igång

Inlägg av Johanb »

Det går alldeles utmärkt att använda valfri editor och sedan köra en "make" för att bygga projektet, det är så jag gör. Makefile-exempel finns på nätet och hittar man en bra så är det lätt att återanvända den mellan olika projekt, make kan anropa avrdude för att bränna in hex-filen i chippet.
Det finns tutorials som bygger på att man använder kommandoradsverktygen.
ronnylov
Inlägg: 987
Blev medlem: 23 februari 2012, 12:06:19
Ort: Borås

Re: Nybörjare med AVR - försöker komma igång

Inlägg av ronnylov »

Tack för hjälp så här långt.

Ja det känns som man får mer kontroll om man kör makefil och kommandoradbaserade verktyg. Så många parametrar som kan gå fel när man klickar runt sig i grafiska gränssnitt. Men jag vill testa olika sätt att göra det på så får vi se vilket som är smidigast.

Var kan man hitta bra kretscchema-exempel på grundläggande uppkopplingar?
Hittade en bra beskrivning av ett utvecklingskit man kanske kan ta hjälp av:
http://www.protostack.com/download/User ... -V1.6).pdf
Johanb
Inlägg: 3406
Blev medlem: 26 mars 2006, 22:26:12
Ort: Smedjebacken

Re: Nybörjare med AVR - försöker komma igång

Inlägg av Johanb »

Om du inte redan gjort det så föreslår jag en titt hos http://www.avrfreaks.net, det finns även en hel del roliga kopplingar hos Atmel som application notes (schema och kod).

Under forum på avrfreaks kan du gå till AVR Tutorials (AVR Freaks Forum Index » AVR (8-bit) Technical Forums » AVR Tutorials) för att hitta ännu mer intressant. Problemet som kan uppstå är att det finns för mycket info så det blir svårt att sålla.
Det du kommer att stöta på är att någon gjort ett schema för en viss typ av krets medans du har en annan typ tillgänglig, då kan man få översätta vissa registernamn (ex UDR till UDR0 och liknande, databladen är till stor hjälp) eller kanske utesluta vissa komponenter som kristall och liknande.
Kör du fast finns det ofta hjälp här om du är noggrann med att vara utförlig med information om din koppling, kod och problemet.
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Nybörjare med AVR - försöker komma igång

Inlägg av jesse »

Välkommen!

Jag har själv bara kört med AVR Studio (4/5/6) och en gammal AVR ISP programmerare, men känner att nu är det snart dags att göra en toolchain i linux istället (avr-gcc avr-libc avr-binutils avrdude).. Hoppas dock slippa böka med Eclipse. Editorer finns det väl gott om att välja bland.
Johanb
Inlägg: 3406
Blev medlem: 26 mars 2006, 22:26:12
Ort: Smedjebacken

Re: Nybörjare med AVR - försöker komma igång

Inlägg av Johanb »

Hoppas och hoppas, det är bara att strunta i eclipse :)
ronnylov
Inlägg: 987
Blev medlem: 23 februari 2012, 12:06:19
Ort: Borås

Re: Nybörjare med AVR - försöker komma igång

Inlägg av ronnylov »

Jag tror jag har lyckats programmera min ATMega328P med hjälp av avrdude trots att jag fick någon varning:

Kod: Markera allt

[ronny@r1arch Debug]$ sudo avrdude -c usbasp -p m328p -U flash:w:hello.elf

avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e950f
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: warning: cannot set sck period. please check for usbasp firmware update.
avrdude: reading input file "hello.elf"
avrdude: input file hello.elf auto detected as raw binary
avrdude: writing flash (32768 bytes):

Writing | ################################################## | 100% 10.62s



avrdude: 32768 bytes of flash written
avrdude: verifying flash memory against hello.elf:
avrdude: load data flash data from input file hello.elf:
avrdude: input file hello.elf auto detected as raw binary
avrdude: input file hello.elf contains 32768 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 9.34s



avrdude: verifying ...
avrdude: 32768 bytes of flash verified

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

[ronny@r1arch Debug]$ 
Är det inte svårare än så?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Nybörjare med AVR - försöker komma igång

Inlägg av snigelen »

Nja, lite svårare om du använder konventionella namn på filerna. .elf är i regel utdata från länkaren och det behöver man göra om till något annat innan man laddar upp det. Intel hex är vanligt. Med "file" kan man få en kvalificerad gissning av vad en fil innehåller.

Kod: Markera allt

$ file main.elf
main.elf: ELF 32-bit LSB executable, Atmel AVR 8-bit, version 1 (SYSV), statically linked, not stripped
Denna kan man göra om till .hex med t.ex.

Kod: Markera allt

avr-objcopy -O ihex -R .eeprom main.elf main.hex
som är

Kod: Markera allt

$ file main.hex
main.hex: ASCII text, with CRLF line terminators
och börjar så här

Kod: Markera allt

$ head main.hex
:100000000C94C7000C94E6000C94E6000C94E600F7
:100010000C94E6000C94E6000C94E6000C94E600C8
:100020000C94E6000C94E6000C94E6000C94E600B8
:100030000C94E6000C94E6000C94E6000C94E600A8
:100040000C94E6000C94E6000C94E6000C94E60098
:100050000C94DD010C9407020C94E6000C94E8006B
:100060000C94E6000C94E6000C94E6000C94E60078
:100070000C94E6000C94E6000C94E6000C94E60068
:100080000C94E6000C94E6000C94E6006E616E00A1
:10009000696E660000407A10F35A00A0724E18098B
Denna kan laddas upp med hjälp av avrdude.
ronnylov
Inlägg: 987
Blev medlem: 23 februari 2012, 12:06:19
Ort: Borås

Re: Nybörjare med AVR - försöker komma igång

Inlägg av ronnylov »

Det var eclipse som skapade .elf vid kompileringen. Undrar varför eclipse inte kompilerar direkt till .hex?

Men det kändes ändå bra att programmeraren lyckades prata med min AVR, då kan jag inte ha kopplat in det helt fel i alla fall.

Jag skulle behöva en guide hur man gör detta utan eclipse på linux. Känns som att eclipse ställer till det mer än underlättar. Kan avr-gcc generera .hex månntro?
snigelen
Inlägg: 815
Blev medlem: 8 maj 2009, 11:02:14
Ort: Lund

Re: Nybörjare med AVR - försöker komma igång

Inlägg av snigelen »

Använd valfri editor och make. Du kan använda programmet mfile för att göra en Makefile. Jag råkade hitta denna tråd som handlar om det.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Nybörjare med AVR - försöker komma igång

Inlägg av E85 »

ronnylov
Inlägg: 987
Blev medlem: 23 februari 2012, 12:06:19
Ort: Borås

Re: Nybörjare med AVR - försöker komma igång

Inlägg av ronnylov »

Nu funkar det!

Jag konverterade .elf till .hex så som snigelen beskrev det och laddade in det på nytt med avrdude.
Kopplade sedan ur programmeraren och kopplade i lysdioderna och nu blinkar de så fint!
Roligt när man fått den att "leva" för första gången. Då har jag kommit igång!
Skriv svar