Sida 2 av 3
Postat: 6 maj 2006, 20:48:57
av maxxflow
Ok, nu har jag laddat ner avrdude-programmet.. Enligt manualen verkar det som jag ska köra följande för att överföra en .hex-fil:
Kan det stämma?
I ATtiny15's datablad står det massa om programmering.. Finns tydligen två "lägen" på nåt sätt, "High-voltage and Low-voltage serial programming mode"
Databladet:
http://www.elfa.se/pdf/73/736/07366479.pdf (sida 55)
Jag fattar inte mycket av detdär.. Vad är skillnaden på high- och low-voltage mode? (Förutom att man ska ha 12V på pinne 1 i high-voltage mode, det vet jag.. Men varför?)
Hur ska jag koppla parallelporten till AVR:en?
Om man jämför tabellen på
denna sidan och ritningen under rubriken "Low-voltage Serial Downloading" i databladet (s. 59), så verkar det ju som att man ska koppla såhär:
Kod: Markera allt
LPT -- AVR
7 -> PB5 RESET
8 -> PB2 SCK (clock input)
9 -> PB0 MOSI (instruction in)
10 -> PB1 MISO (data out)
18 -> GND
Kan det stämma?
Och hur vet AVR:en isf. att den ska programmeras? Sköter "avrdude" det? Så det bara är att koppla in AVR:ens matningsspänning och köra avrdude-kommandot på datorn?
Eller behöver man göra nåt speciellt för att sätta den i programmerings-läge?
Postat: 6 maj 2006, 23:32:47
av maxxflow
Jag testade att koppla som jag skrev innan, och jag körde "avrdude -p t15 -c bsd -e -U flash:w:program.hex". Den laddade upp programmet, det verkade fungera..
Ok, så jag kopplade loss paralellports-sladdarna och kopplade in en lysdiod mellan GND och PB0. Lite dumt kanske, men det gjorde jag.. Sen anslöt jag AVR:ens matningsspänning, lysdioden tändes då (ganska svagt) men började genast att snabbt minska i ljusstyrka tills den slocknade. Det var inte lysdioden som pajade, för den funkade sen när jag kopplade in ström direkt till den..
Men nu kommer det konstiga... När jag sen kopplade in AVR:en till paralellporten igen, så gick det fortfarande att ladda upp och ner program. Jag trodde ju att jag pajade hela AVR:en med dendär lysdioden

Hur kommer detta sig? Varför kan jag ladda upp och ner program, men lysdioden funkar inte längre?
Kan AVR:en gå sönder av att jag kopplar in en lysdiod direkt mellan GND och en PB?
Här är programmet förresten:
Kod: Markera allt
.include tn15def.inc
.def Temp = R16
.org 0x0000
rjmp START
START:
ldi Temp, 0xFF
out DDRB, Temp
out PORTB, Temp
Postat: 6 maj 2006, 23:40:06
av Icecap
Nä då, du har ju en strömbegränsningsmotständ mellan så det skulle inte vara möjligt att ha sönder den på det vis..... för du _har_ väl ett sånt motstånd eller hur?
Postat: 6 maj 2006, 23:43:15
av cykze
Programmeraren kallas för 'bsd'. Kör:
avrdude -p t15 -c bsd -U flash:w:program.hex
Det är "Low-voltage serial programming" som gäller. Parallellprogrammeringen (kräver 12V) behöver bara användas om man har råkat ställa in Fuse-bitarna helt fel (t ex inaktiverat serie-programmering).
Koppla som du skrev och kör kommandot ovan så ska det fungera. Glöm inte de fyra seriemotstånden (~1kOhm) till varje signal (inte jord).
edit: lite sent kanske
Postat: 6 maj 2006, 23:43:42
av maxxflow
Icecap skrev:Nä då, du har ju en strömbegränsningsmotständ mellan så det skulle inte vara möjligt att ha sönder den på det vis..... för du _har_ väl ett sånt motstånd eller hur?
Nepp, det var precis därför jag sa att det "var väl lite dumt"..

Ibland gör man saker som inte är helt genomtänkta..

Och man lär ju sig av sina misstag.. Jag har aldrig tidigare varit med om att nåt har gått sönder när jag använt lysdioder utan motstånd, men nu vet jag vad som händer
Men om den nu är kass, hur kommer det sig då att den fortfarande kan kommunicera med datorn?
Postat: 6 maj 2006, 23:49:43
av Icecap
Kommunicerar LED'n med datorn? Hur?

Postat: 6 maj 2006, 23:51:12
av maxxflow
cykze skrev:Programmeraren kallas för 'bsd'. Kör:
avrdude -p t15 -c bsd -U flash:w:program.hex
Det är "Low-voltage serial programming" som gäller. Parallellprogrammeringen (kräver 12V) behöver bara användas om man har råkat ställa in Fuse-bitarna helt fel (t ex inaktiverat serie-programmering).
Koppla som du skrev och kör kommandot ovan så ska det fungera. Glöm inte de fyra seriemotstånden (~1kOhm) till varje signal (inte jord).
edit: lite sent kanske
Japp, exakt det kommandot körde jag. Och det fungerade väl förmodligen, eftersom verifieringen sa "OK", och dendär lysdioden hann lysa lite innan den kortslöt alltihopa..
Jag var förresten lite våghalsig och körde utan de 4 motstånden på paralellporten... Hade nämligen inga som funkade.. Först testade jag med ett 2,2k, ett 2,7k, ett 4,1k och ett 2,2k motstånd, men det funkade inte, så jag testade helt utan motstånd, och det fungerade... Är motstånden för att skydda datorns paralellport? Eller AVR:en? Eller båda?
Postat: 6 maj 2006, 23:52:36
av maxxflow
Icecap skrev:Kommunicerar LED'n med datorn? Hur?

Neej, AVR:en

Byt ut "den" mot "AVR:en" i min mening...
Alltså: "Men om nu AVR:en är kass, hur kommer det sig då att den fortfarande kan kommunicera med datorn?"
Postat: 6 maj 2006, 23:55:46
av Icecap
Om man knallar en portpinne är det sällan att hela kretsen avlider av det men det är ju AVR och då vete fan om inte den är paj till att börja med

Postat: 6 maj 2006, 23:59:01
av cykze
Motstånden skyddar både AVR:en och parallellporten mot kortslutningar. Ser du till att aldrig sätta SCK- och MOSI-pinnarna till utgångar är det ingen fara. Men jag tycker du ska köra med motstånd iaf. Prova med några med lägre motstånd.
Jag har gjort en massa konstiga kopplingar med AVR:er, men har aldrig lyckats ha sönder någon.
Vad har du för spänning på utpinnen när du har lysdioden (åt rätt håll) och ett motstånd inkopplat?
Jag vet inte vad som händer när asm-koden tar slut så där. Prova att lägga in det här sist i koden:
Postat: 7 maj 2006, 00:27:02
av maxxflow
Ööööh? "Knaaaasibas?" för att citera Mongo från yttre rymden..

Jag kopplar lysdioden (med motstånd denna gången

) mellan GND och PB0.
Jag kopplar 5v till Vcc-benet på AVR:en. Inget händer.
Men om jag kopplar matningsspänningen till PB2, 4 eller 5,
då körs programmet! Lysdioden tänds.
För att testa ordentligt så kommenterar jag bort raden "out PORTB, Temp" i programmet, och laddar upp det igen. Då tänds lysdioden inte när jag kopplar matningsspänningen till PB2, 4 eller 5. Jag testar igen att kompilera programmet med outb-raden "aktiv", och då tänds lysdioden när jag kopplar matningsspänningen till PB2, 4 eller 5.
Mysko? Vad sjutton håller den på med?
Postat: 7 maj 2006, 10:24:20
av TheUnreal
Programmeringens största gåta: Att förstå vad man sagt åt sin uC att göra
Jag skulle rekomendera att du söker rätt på och läser igenom en bra nybörjar guide. För PIC är
den här rätt bra.
Själv har jag inte pysslat nått med AVR, men kan tänka mig att liknande dokument finns även till dom.
Visst kan det kännas som att det är mycket läsning för att komma igång, men det är helt klart värt det. Man tar igen mycket felsöknings/slitahår-tid på att ha läst mer än man tror sig behöva, och man kommer snabbt vidare från det första blinka en lysdiodprojektet till mer inveklade projekt.
Författaren har ju skapat ett dokument som denne tror är bra information man behöver för att "börja simma" med aktuella microcontrollers, varför inte dra nytta av författarens misstag och råd?
Lycka till

Postat: 7 maj 2006, 14:08:42
av sodjan
En vild gissning bara (har inte pysslat något med AVR...).
Asm koden ser väldigt "kort" ut. Är du säker på att det inte finns något mer
som du behöver göra, t.ex stänga av eventuella analoga funktioner eller
liknande ?
Sen bör nog inte programet tillåtas löpa fritt på slutet, antagligen kommer
du ganska snart tillbaka till reset-punkten, och hela programmet
kommer att köras om igen hela tiden.
Finns det ingen reset-pinne som du måste koppla "rätt" ?
Postat: 7 maj 2006, 14:11:31
av cykze
> Men om jag kopplar matningsspänningen till PB2, 4 eller 5, då körs programmet ! Lysdioden tänds.
Hur kom du ens på tanken att spänningsmata AVR:en från io-pinnarna?! För att utesluta att du har haft sönder något i AVR:en så tycker jag att du ska köpa en ny AVR, förslagsvis en ATmega88 eller någon lite större.
Sen behöver du inte koppla bort AVR:en från "programmeraren" när du ska köra den. Lägg till argumentet "-E noreset" till avrdude-kommandot så startar programmet i AVR:en efter att det har blivit inlagt.
edit: Det förutsätter såklart att du inte kopplar lysdioden til någon av programmeringspinnarna.
Postat: 7 maj 2006, 14:43:58
av maxxflow
cykze skrev:Hur kom du ens på tanken att spänningsmata AVR:en från io-pinnarna?!
Jag råkade nudda en av programmerings-trådbyglarna (som var kopplad till PB2) med 5v-sladden, och märkte då att lysdioden tändes.. Så då modifierade jag koden så att lysdioden skulle vara släckt, för att testa om jag verkligen startade AVR:en eller om PB2 bara var ihopkopplad med PB0 (där lysdioden var inkopplad).
cykze skrev:För att utesluta att du har haft sönder något i AVR:en så tycker jag att du ska köpa en ny AVR, förslagsvis en ATmega88 eller någon lite större.
Jo, det ska jag nog göra.. Men jag tror jag håller mig till billiga ATtiny15 tills jag lärt mig lite mer, lite synd om jag köper en dyrare och råkar "mörda" den..
