Jag har börjat bli riktigt sugen på att bygga något baserat på en AVR. Nu har jag några frågor innan jag kan komma igång.
Först gäller det programmeraren. Jag hade tänkt att använda programmet avrdude ( http://www.bsdhome.com/avrdude/ ). Säg att jag bygger den enklaste varianten på den sidan. Den som ser ut så här:
Parallel Port Programmer Function
Pins 2-5 Vcc (see note below)
Pin 7 AVR /RESET
Pin 8 AVR SCK (clock input)
Pin 9 AVR MOSI (instruction in)
Pin 10 AVR MISO (data out)
Pin 18 Signal Ground
Går det då att använda den kopplingen även om man har AVR:en inkopplad i en krets bestående av t ex några lysdioder kopplade till io-portarna på AVR:en? Eller kräver det att man använder en extra ic-krets? Skulle nämligen vilja bygga en liten kombinerad programmerare och labbkrets (några switchar och lysdioder att experimentera med).
Nästa sak jag undrar över är hur man lär sig att programmera C till AVR:en. Hade tänkt använda mig av avr-gcc. Men jag har inte hittat någon bra sida med exempelkod. Allt jag har hittat är för asm.
Det "går", men tänk på att om du använder de portarna LPT-porten är ansluten till, kommer även de att få in signalen, och är inte pinnarna på LPT-porten i "tri-state" kommer det gå en massa ström => risk att något går sönder, så du BÖR absolut koppla loss avr från datorn på gågot sätt (antingen helt enkelt ha en 6pol. kontakt du ansluter just när du ska prog., (smidigt när man har en (elektroniskt) färdig konstruktion, som man ska fixa mjukvara till) eller klurar du ut ngt sätt att koppla in någon slags strömbrytare (mekanisk eller elektronisk) så LPTn inte är anslutna när AVRen körs
-Kom ihåg att du måste även ha en oscillator (ex kristall) på osc-pinnarna på AVRen när du programmerar, om den inte har inbyggd sådan
Om jag gör så att jag kör med en 6-polig kontakt som jag kopplar in då jag ska programmera om AVR:en. Blir det inte då så att parallellporten får driva det som är kopplat till AVR:ens pinnar under själva programmeringen? Om jag t ex har en lysdiod kopplad till pinne 8 på AVR:en så kommer ju den att få ström när parallellporten gör den pinnen hög under programmeringen. Eller tänker jag fel?
Jo det är helt sant, och ett problem (LPT klarar inte att driva speciellt mycket, eftersom den egentligen inte släpper ut ngn matningspänning utan man tar spänning från utgångarna)
Det jag skulle göra är att skippa att mata kretsen från LPT utan ha en "riktig" matning som du driver kretsen både när du kör AVRen och när du programmerar den (då slipper du alla problem med detta, bara du ser till att ha 5V matning, eftersom LPT använder 5V-logik).
Detta betyder att du bara behöver ha 5 poler i kontakten, vilket inte är fel
Säg att pinne 8 på AVR:en är satt som en ingång under programmeringen, medan jag i mitt program har satt den pinnen att vara utgång för att kunna styra lysdioden som sitter på den pinnen. När sedan parallellporten, under programmeringen, någon gång sätter motsvarande pinne på parallellporten hög så kommer AVR:en få in den signalen. Men lysdioden kommer också samtidigt lysa eftersom dom sitter ihopkopplade. Då har man ju ingen nytta av den externa spänningsmatningen till Vcc på AVR:en, eftersom det inte är AVR:en som får lysdioden att lysa utan signalen från parallellporten. Eller blir det inte så?
Nej, så fort reset-benet på AVRen blir låg går ALLA I/O på AVRen över till "tri-state" (dvs blir högohmiga) och kan alltså inte driva ex. en LED
Edit 1:
Dock går vissa AVRmodellers reset-ben att använda som I/O, hur det fungerar då vet jag inte (men det står säkert i databladet, om du n krets är sådan (vilken AVR är det du tänker använda?)
Edit 2:
Anledningen att du inte bör/ska mata AVRen både från extärn matning OCH LPT samtidigt är, som du säkerligen redan förstått, att det finns risk att det börjar gå lite för stor ström till/från LPT-utgången (som används som "matningsspänning") vilket gör att det finns risk att du bränner kretsar på datorns moderkort (vilket inte är kul att laga - tro mig)
Jag hoppas att du inte tycker jag låter negativ till din idé, jag använde mig av en liknande koppling förut, när jag började med AVRer, som fungerade klockrent. Men när jag insåg hur mycket jag skulle använda AVRer i framtiden köpte jag ett STK500. Ok, lite dyrt, men ändå klart värt pengarna, men det beror självklart hur mycket man tänker labba.
Men om pinne 9 på parallellporten skulle gå hög under programmeringen så kommer väl den driva igång lysdioden (se schemat nedan). Då kommer den strömmen väl komma från parallellporten och då spelar det ingen roll om jag har en separat spänningsmatning eller inte.
Åhh, du menar så... Ja naturligtvis (jag kanske läste ditt förra inlägg lite slarvigt ) strömmen som driver LEDen kommer från LPT-pin9.
Så under programmeringen spelar det i princip ingen roll vart matningen kommer ifrån, så länge du inte har en massa andra kretsar inkopplade, för isf kommer de oxå "knycka" ström från LPT, och det kommer den antagligen inte klara av (lite beroende på hur mycket ström kretsarna drar), men en LED klarar den (borde iaf göra)
Fast jag hoppar nog över nog över att använda just dom där 3 io-portarna. Den har io-portar över så att det räcker för mig iaf. Dessutom har dom där väl ingen specialfunktion som man normalt har nytta av förutom vid programmeringen.
Nästa sak jag funderar över är RESET-pinnen. Under normal körning ska ju RESET vara hög. Men under programmeringen ska ju RESET vara låg. Hur blir det med det?
Jo, det blir konstigt eftersom den externa spänningsmatningen kommer göra den hög och samtidigt kommer parallellporten att göra den låg. Måste jag ha en strömbrytare som kopplar bort +5V:en till Reset under programmeringen.
Om du tittar i databladet kommer du se att atmel rekomenderar att du sätter ett motstånd mellan reset och VCC (någonstans mellan 10k och 100kohm brukar det vara) och en konding mellan reset och GND (100nF om jag inte minns fel),
detta räcker under körning, men när avren ska programmeras kopplas reset även till LPT, som drar reset låg (men har du den hela tiden inkopplad till LPT ska programmet på datorn se till att den utgången på LPTn blir hög, så fort programmeringen blir färdig
Ja, bara du gör följande:
- inte har annan matning (från ex. LPT)
- "matar" reset via ett motstånd (du ska alltså _inte_ ansluta reset direkt till +5V)