Kimlorentz Skrevet 6. november 2007 Del Skrevet 6. november 2007 (endret) Jeg har nettopp skaffet meg en STK500 og tenkte å begynne å prøve programering med bruk av AVR Studio. jeg lurte på om det finnes en bok som kan hjelpe meg i begynnelsen, og hva alle forkortelsene betyr som f.eks sbis, inc, dec,ror,rol osv osv. No har jeg en ATtiny26-16PU som jeg tenkte skulle fungere som en lys styrer. Tenkte slik at jeg har 6 stk lys dioder som skal stå i en sirkel og 2 om gangen skal lyse(som et lys tårn som roterer). Jeg tenkte å ha en Start knapp og 1 stopp knapp på den og. Er det noen her som kan gi meg noen hint? på både programmering og bøker? dere kan nå meg her eller på [email protected] Takk i forveien Endret 8. november 2007 av Kimlorentz Lenke til kommentar
Schlipperz Skrevet 8. november 2007 Del Skrevet 8. november 2007 Med et raskt Google søk kom jeg fram til disse to sidene som kan være til god hjelp tror jeg. ATSTK500 http://www.atmel.com/dyn/products/tools_ca...sp?tool_id=2735 Diverse info og Documents. AVR Studio 4 http://www.atmel.com/dyn/products/tools_ca...sp?tool_id=2725 med diverse software & Documents Men dette har vel du funnet allerede,.. Kan kanskje komme tilbake med et forslag til program. Lenke til kommentar
Firesky Skrevet 9. november 2007 Del Skrevet 9. november 2007 jeg lurte på om det finnes en bok som kan hjelpe meg i begynnelsen, og hva alle forkortelsene betyr som f.eks sbis, inc, dec,ror,rol osv osv. Det står alt slikt i instruksjonsett manualen Jeg har stort sett lært det meste ved å leke med andres kode, og lese forklaringene i databladene. Bare å ta kontakt om det er noe du lurer på, mye mulig jeg kan svare deg :=) Lykke til Lenke til kommentar
Kimlorentz Skrevet 15. november 2007 Forfatter Del Skrevet 15. november 2007 jeg lurte på om det finnes en bok som kan hjelpe meg i begynnelsen, og hva alle forkortelsene betyr som f.eks sbis, inc, dec,ror,rol osv osv. Det står alt slikt i instruksjonsett manualen Jeg har stort sett lært det meste ved å leke med andres kode, og lese forklaringene i databladene. Bare å ta kontakt om det er noe du lurer på, mye mulig jeg kan svare deg :=) Lykke til Til no har jeg bare funnet ut hvor jeg finner forklaringer på di forskjellige forkortelsene, driver med programmering no. Jeg bruker en Atmega8515 som følger med STK500 fant og ut av viss jeg skriver out PINB, 0x01 Så betydde det utgang på pin 1 i B porten, men så var det å legge det inn i registeret på en måte, ikke sikker om dette er rett. Planen var som følge no ved bruk av Assembly AVR Studio 4 Port A skal vere bryter Port B skal vere Led Ved å trykke på SW1 i Port A skal led1 i Port B lyse Ved å trykke på SW2 i Port A skal led2 i Port B lyse osv. og viss jeg trykker sw1 igjen etter at led lyser skal den slå seg av. Har du noen hint der? Lenke til kommentar
Firesky Skrevet 15. november 2007 Del Skrevet 15. november 2007 (endret) For å legge det inn i registeret først, noe man må, så skriver man LDI R16,0x01 Da vil den legge verdien 1 i register 16, det er anbefalt å bruke registrene mellom 16 og 32, er usikker på hvorfor, men tror det har noe med at kontrolleren bruker de første registrene til noe. Så for å sende ut 0x01 til port b, så gjør du slik: ldi R16,0x01 out portb,R16 Du må også huske å definere port b som utgang, det gjøres slik: ldi r16,0xFF //setter r16 til 255 out DDRB,Temp //overfører det til DDRB ldi r16,0x00 //setter r16 til 0 out PORTB,temp //setter portb til 0 DDRB definerer om porten skal være inngang eller utgang, når du setter denne til 255 så vil alle bit'ene i portb være utganger, de bit'ene/pinnene som er 1 er ut, mens de som er 0 er inn. Noe som er veldig lurt for å holde system, er å definere et register slik at den får et navn, det gjør du helt i starten, slik: .def temp=r16 da vil r16 få navnet temp, slik at du istedet for å skrive ldi r16,0x01, så skriver du ldi temp,0x01 Et av mine første prosjekter var å lage en sak som sendte ut PWM signal, som kunne reguleres ved 2 knapper. Du kan ta en titt på koden om du vil http://eldrsky.net/programmering/asm/avr/T15_PWM/T15_PWM.txt I seksjonen jeg har kalt "loop" så ser du hvordan jeg registerer knappetrykkene, ved hjelp av SBIC (skip if bit is clear) Denne instruksjonen gjør slik at hvis bit'et er 0 (clear) så hopper den over neste instruksjon, er den 1 så kjører den neste instruksjon. Ikke tenk på timer/counteren som jeg bruker i koden, dette trenger du ikke for å få en LED til å lyse, så hvis du lurer på hva OCR1A, TCCR1 og OCR1A er, så ikke tenk på det enda. Lykke til =) Endret 15. november 2007 av Firesky Lenke til kommentar
Kimlorentz Skrevet 15. november 2007 Forfatter Del Skrevet 15. november 2007 (endret) Så hvordan veit han at PORTA er inngangen da? her er hva jeg har skrevet til no ;***** Styring av LEDs .include "8515.inc" .def temp =r16 ldi temp,0xFF out DDRB, temp ldi temp,0x00 out PORTB,temp sbi PINB,0x00 fant noe om inngangen men ikke sikker på hvordan skrive inn in DDRA,temp in PINA,0x00 Endret 15. november 2007 av Kimlorentz Lenke til kommentar
Firesky Skrevet 15. november 2007 Del Skrevet 15. november 2007 Du må definere port a som inngang, akuratt som du definerer port b som utgang. ldi temp,0xFF out DDRB, temp ldi temp,0x00 out DDRA,temp ldi temp,0x00 out PORTB,temp in DDRA,temp Her leser du inn DDRA til registeret, DDRA er instillingene for porten, hvilke pinner som er inn eller utgang Skal du lese hele porten må du skrive in PORTA,temp du trenger ikke bruke 'in' instruksjonen for å lese enkle bit, da ville jeg heller brukt SBIC som sagt. Si hvis du nå definerer to registere som one, og zero, og legger inn verdien 0x00 i zero, og 0x01 i one, så vil det bli slik: sbic PINB,0x00 //hvis pinne0/bit0 er 0, så hopper den over neste, hvis den er 1, så kjører den neste out porta,one // hvis pinne0/bit0 på portb er 1, så setter den porta til 0x01 sbic PINB,0x01 //hvis pinne1/bit1 er 0, så hopper den over neste, hvis den er 1, så kjører den neste out porta,zero // hvis pinne1/bit1 på portb er 1, så setter den porta til 0x00 Så, dette blir ikke en knapp som 'toggler' lysdioden, men 2 knapper, en til av og en til på. Har du lagt denne rutinen i en loop btw? det er veldig viktig, hvis ikke vil den bare kjøre igjenom den å stare kontrolleren på nytt, da vil den også sette portene til 0, hvis den starter på nytt. For å kjøre den i loop, så lager du en 'label' (tror det var det det heter) og legger rutinen under den, og får den til å hoppe tilbakre til rutinen, når rutinen er slutt. slik: LOOP: sbic PINB,0x00 out porta,one sbic PINB,0x01 out porta,zero rjmp loop //rjmp hopper til en rutine, nå hopper vi opp til begynnelsen av rutinen igjen Lenke til kommentar
Kimlorentz Skrevet 16. november 2007 Forfatter Del Skrevet 16. november 2007 (endret) Her er koden til no, fortsatt problemer med slutten den sier D:\AVR prosjekter\SWandLEDs.asm(18): error: Invalid register Under LOOP out PORTB,0x00 FAILED out PORTB,0x01 FAILED ;***** SWITCH and LED controll .include "8515def.inc" .def Temp =r16 ldi Temp,0xFF out DDRB,Temp ldi Temp,0x00 out PORTB,Temp ldi Temp,0x00 LOOP: sbic PINA,0x00 out PORTB,0x00 sbic PINA,0x01 out PORTB,0x01 rjmp LOOP Hva er det jeg ikke ser her? Noe jeg har glemt? Endret 16. november 2007 av Kimlorentz Lenke til kommentar
Firesky Skrevet 17. november 2007 Del Skrevet 17. november 2007 legg til .cseg i linjen under .def temp=r16 Jeg vet ikke hva cseg er for noe, men jeg har alltid den med i koden Grunnen til feilmeldingen er at du prøver å spytte ut 0x00, dette må først lastes inn i et register, så outputtes... prøv denne koden, dette er samme som din, bare med litt retting, ta en titt på forskjellen, jeg lager et register som heter zero og et som heter one, og setter en verdi på dem før loopen, slik at dem alltid vil ha den verdien, så istedet for out PORTB,0x00, så endrer jeg denne til det registeret som inneholder den verdien, slik: out PORTB,zero, du kan bare spytte ut verdier som ligger i registeret, så du må først laste inn en verdi i et register, så outputte registeret til porten. ;***** SWITCH and LED controll .include "8515def.inc" .def Temp =r16 .def zero=r17 .def one=r18 .cseg ldi zero,0x00 ldi one,0x01 ldi Temp,0xFF out DDRB,Temp ldi Temp,0x00 out PORTB,Temp ldi Temp,0x00 LOOP: sbic PINA,0x00 out PORTB,zero sbic PINA,0x01 out PORTB,one rjmp LOOP Lenke til kommentar
Kimlorentz Skrevet 17. november 2007 Forfatter Del Skrevet 17. november 2007 (endret) ;***** SWITCH and LED controll .include "8515def.inc" .def Temp =r16 .def zero=r17 .def one=r18 .cseg ldi zero,0x00 ldi one,0x01 ldi Temp,0xFF out DDRB,Temp ldi Temp,0x00 out PORTB,Temp ldi Temp,0x00 LOOP: sbic PINA,0x00 out PORTB,zero sbic PINA,0x01 out PORTB,one rjmp LOOP Funket nesten, alle lysene står på og når jeg trykker sw1 slår led1 seg av mens jeg holder den inne og slår seg på når jeg slipper(alle andre leds står på) Når jeg trykker sw2 blir led1 sterkere mens jeg holder knappen inne og svakere når jeg slipper(alle andre led står på og ikke blir påvirket) Endret 17. november 2007 av Kimlorentz Lenke til kommentar
Firesky Skrevet 18. november 2007 Del Skrevet 18. november 2007 (endret) Humm, høres rart ut, men det virker som man har klart å komme et lite steg videre, siden det ihvertfall skjer noe =D Jeg vet at på STK500 så er lysdiodene inverterte, slik at når alle lyser så er alle 0, men når alle er 1 så er dem slukket, det kan være det er slik med knappen også, prøv å bytt ut SBIC (skip if bit is cleard) instruksjonen med SBIS (skip if bit is set), hvis den nå funker, så er knappene også inverterte, skal fyre opp windows på laptopen å se litt nærmere i AVRStudio imorgen, å se om det er noe med koden Hvis knappene er inverterte, så vil den ikke hoppe over de instruksjonene som kun skal kjøres når pinnen/bittet er 1, siden alle bit'ene er 1, og 0 mens du holder nede knappene (hvis knappene er inverterte da selvfølgelig) Derfor vil den slå av og på LED'ene i en såpass høy hastighet at det kan se ut som den lyser på halv lysstyrke, Endret 18. november 2007 av Firesky Lenke til kommentar
Kimlorentz Skrevet 19. november 2007 Forfatter Del Skrevet 19. november 2007 (endret) Fått en fin liten jobb oppgave no. 10 bryterer 10 leds 10 releer. Jeg skal lage noe belastningskretser til et test utstyr og vi vurderte å bruke AVR, så da blir det å lage en krets av dette. SW01 = OFF SW02 = NO LOAD SW03 = 200VA UNITY SW04 = 400VA UNITY SW05 = 600VA UNITY SW06 = 400VA LAG SW07 = 400VA LEAD SW08 = SHORT SW09 = POWER OFF SW10 = POWER ON *Kun 1 av bryterene kan vere inne om gangen, som f.eks sw2 inne alle andre av, så sw5 og alle andre av. Så da blir det en del koding ja, tror nok ikke hex koding heller er mulig. under her ser du utgangene. Ut til releer ___UT_________INN____ PB0---PB7____PA0---PA7 0000 0001______SW1 0000 0010______SW2 0000 0100______SW3 0000 1000______SW4 0001 0000______SW5 0010 0000______SW6 0100 0000______SW7 1000 0000______SW8 Ut til rele styring av main power ___UT___________INN___ PC0---PC7____PD0---PD7 0000 0000_______SW9 0000 0001_______SW10 I OFF på alt skal alle releer vere spenningsløs, ved sw1 inne skal kun rele1 ha spenning osv. Blir en del arbeid men håper det er mulig å få til. Endret 19. november 2007 av Kimlorentz Lenke til kommentar
Firesky Skrevet 19. november 2007 Del Skrevet 19. november 2007 Du bruker Mega8515 sa du? Klart det går! =D Vil du jeg skal skrive hele koden for deg, eller skrive den selv etter forklaring? :p Lenke til kommentar
Kimlorentz Skrevet 19. november 2007 Forfatter Del Skrevet 19. november 2007 (endret) Du bruker Mega8515 sa du? Klart det går! =D Vil du jeg skal skrive hele koden for deg, eller skrive den selv etter forklaring? :p Hehe hadde vert fint med begge, sitter å leiter etter en avr guilde på nettet no, fant 1 leser på den no. Endret 19. november 2007 av Kimlorentz Lenke til kommentar
Firesky Skrevet 19. november 2007 Del Skrevet 19. november 2007 (endret) Start: in temp,PINA out PORTB,temp rjmp Start Når du slipper vil porta være 0, da vil den også spytte ut 0 på portb. Her har du også gjort en liten feil, PINA leser en spesifikk pinne på porta, bytter du ut PINA med PORTA leser den hele porten, alle 8. Jeg har skreve en kjapp kode, den bruker ikke alle 10 I/O portene som du ønsker, dette skal jeg skrive ferdig, men den bruker ihvertfall 8 av dem =) http://eldrsky.net/programmering/asm/avr/a...switchrelay.txt Som du kanskje legger merke til så bruker jeg 8-9 registrere som konstanter, det er egentlig ikke noe spesielt lurt, men har ikke noe spesielt å si når man skriver slike små programmer. Ser du også har funne ut av 0b01010001 jeg forklarte den i koden, Endret 19. november 2007 av Firesky Lenke til kommentar
Kimlorentz Skrevet 20. november 2007 Forfatter Del Skrevet 20. november 2007 (endret) Knall bra, jeg lagde en ganske lik kode i går men funket ikke helt, brukt in og out koding og ikke sbic, og la inn noe ekstra som sikkert var feil det å. Jeg begynner å få forståelse for dette no takk skal du ha =) Kodingen er ferdig no sånn ca legger den som vedlegg her min_f_rste_kode.txt Endret 22. november 2007 av Kimlorentz Lenke til kommentar
Kimlorentz Skrevet 25. november 2007 Forfatter Del Skrevet 25. november 2007 (endret) No var det neste del, ny kode med nesten samme funsjoner. sw1 slår av og på led1 sw2 slår av og på led2 sw3 slår av og på led3 osv osv osv sw8 slår av og på led8 På STK500 er bryterene høy, når du trykker blir di lav på inngangen på 8515 Led er lav, når utgangen på 8515 blir høy lyser leds. Som du ser skal 1 bryter brukes til å slå av og på samme led og hver bryter har hver sin led. Har du noen ideer der. Tenkte på bruke en time delay på 2 sek på bryteren sånn at når du trykker 1 gang må du vente 2 sekunder før du kan trykke igjen. Må fikse en loop på det og at han husker siste instilling, kansje bruke en invert funsjon på bryteren. sw1 blir trykket 1 gang ; viss led er 0 så gir den 1, eller viss led er 1 så gir den 0. sw blir trykket for andre gang ; viss led er 1 så blir den 0, eller viss led er 0 så gir den 1. Endret 25. november 2007 av Kimlorentz Lenke til kommentar
Firesky Skrevet 25. november 2007 Del Skrevet 25. november 2007 Tja, sitter å tenker litt, hadde håpet på det skulle være en "toggle bit" instruksjon, men så heldig var vi ikke Titt litt i intruksjonsmanualen å se om du finner noen instruksjoner som ser brukbare ut. Jeg ser for meg at det blir en del SBIC og SBIS instruksjoner her også, skal se litt på det imorgen. Har fått hjem STK500'n min også nå, så nå kan jeg sitte å dille og sjekke litt her =) Lenke til kommentar
Kimlorentz Skrevet 26. november 2007 Forfatter Del Skrevet 26. november 2007 Tja, sitter å tenker litt, hadde håpet på det skulle være en "toggle bit" instruksjon, men så heldig var vi ikke Titt litt i intruksjonsmanualen å se om du finner noen instruksjoner som ser brukbare ut. Jeg ser for meg at det blir en del SBIC og SBIS instruksjoner her også, skal se litt på det imorgen. Har fått hjem STK500'n min også nå, så nå kan jeg sitte å dille og sjekke litt her =) får ikke sett på det før om noen dager, venter på min nye bærbare maskin. Multicom Compal IFL90+ 15.4" GeForce® 8600M GT 512MB 15,4" Widescreen WSXGA+ 1680x1050 matt skjerm Intel Core 2 Duo Mobile T7700 2.40GHz 4MB Cache 200GB SATA 7200RPM 2.5" 4GB minne DDR2 667MHz SO-DIMM (2 x 2GB) 9-celler 7200mAh XL (batteritid ca 5 timer) Intel® Turbo Memory 1GB Innebygd bluetooth Analog/digital TV-tuner og radio med s-video inngang og fjernkontroll MICROSOFT Windows Vista Home Premium 64-bit, norsk blir knall bra, litt over 13 000 kr med frakt, da skal jeg få gjort mer jobbing Lenke til kommentar
Firesky Skrevet 26. november 2007 Del Skrevet 26. november 2007 Hehe, den er ihvertfall mer enn kraftig nok til å flashe mikrokontrollere med :!: Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå