Initiera ATMega128

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Initiera ATMega128

Inlägg av Harald »

Initiera ATMega128
Jag har försökt initiera ATMega128 med följande utdrag ur kod:

.def Temp = r24

clr Temp
out DDRF,Temp

ser Temp
out DDRG,Temp

När jag gör rebuild i AVR500/501 får jag följande felbesked

Illegal argument type count

Alla andra portar kan initieras utan fel.

Är det något speciellt med port F och G?

/Harald
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

Jag har förmej att de hamnade utan för direkt addresserna....
och måste då skrivas till som de vore ram....
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Inlägg av Harald »

Hur gör man det då?
/Harald
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

Inte hundra men jag har förmej att det går så här

.def Temp = r24

clr Temp
sts DDRF,Temp

ser Temp
sts DDRG,Temp

Jag har inte AVRStudio här så jag har inte testat.....
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Inlägg av Harald »

Det funkar! Tackar!
Kan man lagra vad man vill var man vill i ram. Jag menar om man vill mellanlagra värden etc. Vet du hur man gör det i så fall?
/Harald
henkebenke
Inlägg: 515
Blev medlem: 31 maj 2003, 10:42:37
Ort: Helsingborg

Inlägg av henkebenke »

Man använder ett högnivåspråk som C och skriver =. :wink:

Annars kan man väl pusha och poppa på stacken.
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

Värt att kolla
http://www.atmel.com/dyn/resources/prod ... OC0856.PDF

Några exempel på instruktioner rörande RAMet
lds
sts
pop
push
etc...
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Inlägg av Harald »

Det gick ju bra att initiera genom att skriva direkt mot ramet. Nu kommer nästa problem. Hur ska jag skriva till viss bit i PORTG? Detta funkar inte:

cbi PORTG,3

sbi PORTG,3

Jag vill tända och släcka en lysdiod som finns på bit 3 i PORTG…

/Harald
Användarvisningsbild
Melker
Inlägg: 410
Blev medlem: 26 maj 2003, 22:17:34
Ort: Umeå

Inlägg av Melker »

Antar att du måste läsa in vad som ligger på porten i ett register och sedan sätta biten där och skriva ut det igen. Finns det några andra lösningar borde dom ju rimligtvis stå i databladet, så kolla där.
Ado
Inlägg: 12
Blev medlem: 2 juli 2003, 09:14:34

Tända lysdiod

Inlägg av Ado »

Du måste ange bitens namn, som include-filen läser den.
Om du anger ett tal funkar det inte.

sbi PORTG,PG2 ;Sätter 3:e biten i PortG
cbi PORTG,PG2 ;Nollställer

Om du skall "tända" flera samtidigt är det smidigt att ladda ett slask-registet och sedan kopiera över detta till PORTG.

ex:

ldi r16,0b01010101 ;Kan oxå skrivas decimalt eller hex
out PORTG,r16
Användarvisningsbild
Melker
Inlägg: 410
Blev medlem: 26 maj 2003, 22:17:34
Ort: Umeå

Inlägg av Melker »

Ado tror du missat en del av tråden. För övrigt så fungerar det fint att skriva ett tal (/en bit = 0-7) istället för det definerade namnet på biten.
Ado
Inlägg: 12
Blev medlem: 2 juli 2003, 09:14:34

Taget!!

Inlägg av Ado »

Såg inte det inlägget med ram-minne-addressering.

Hade heller ingen susning om att man kunde skriva tal rakt till register om vid användandet av sbi och cbi............

Man lär så länge man lever...
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Tända lysdioder mm

Inlägg av Harald »

sbi PORTG,PG2 ger samma fel dvs Illegal argument type or count.
Men syntaxen sbi PORTA,7 funkar…
Jag har hittills använt PORT A till E och det har funkat bra. När jag skulle använda PORT F och G tog det tvärstopp redan då jag skulle initiera dem. I databladet står att det finns PORTA, DDRA, PINA till PORTG, DDRG, PING. Det är grafer för alla portarna över hela sidan där man bara bytt ut bokstaven A till B osv. Det ser väldigt imponerande ut men det ger ingen extra info. Det hade räckt att göra en graf för PORT A och så skriva att det gäller samma för alla de övriga… Att F och G ska initieras genom att skriva till dem som RAM står ingenstans vad jag har sett. Hur herr Erixon kommit på detta är en gåta!
Jag hade tänkt använda alla fem bitarna i PORT G som utgångar och använda två för lysdioder och tre för styrning med drivkretsar.
I Instruction Set Summary står ingenting om några begränsningar när det gäller PORT F och G.
Ändå är databladet 377 sidor!
Antingen måste jag hitta någon som på något sätt listat ur hur kretsen funkar vad gäller skrivning till PORT F och G eller också måste jag få tag i en manual eller datablad som förklarar hur kretsen funkar.
Om man läser boken ”Programming and customizing the avr microkontroller” av Dhananjay V. Gadre så inser man snart att han inte vet nästan ett dyft om hur AVR-kretsarna fungerar eller används. Hans kunnande verkar begränsa sig till att kunna tända en lysdiod när man trycker på en knapp. I övrigt tycks han bara skrivit av databladet utan att förstå…
/Harald
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

Tyvär är det nog så att man är tvungen att läsa in värdet från porten och manuplera den i ett register och sedan skriva tillbaka...

för sbi och cbi är begränsad till addresserna 0-31... (0-0x1F)

Det står inderekt i data bladet då PORTF har högre address än 0x1F...

Men lite rekomderad läsning
http://www.atmel.com/dyn/resources/prod ... oc2550.pdf
Med till hörande fil
http://www.atmel.com/dyn/resources/prod ... macros.inc

Hoppas att det har varit till hjälp :)
Harald
Inlägg: 42
Blev medlem: 7 november 2003, 15:50:50
Ort: Östersund

Inlägg av Harald »

Jo, man får alltid hjälp här!
Jag provade med att skriva lds PORTG,Temp och sts PORTG,Temp och det funkar. Fast då får man ju som sagt hålla reda på vad som finns på de 5 bitarna om man bara ska ändra en. En konstig grej är att AVR-programmet ständigt vill pricka för att kretsen är en ATMega103-kompatibel och då kan man inte ha PORT G som utgång…
Den som har skrivit databladet och som gjort AVR-Studio tycker jag kan hoppa i sjön!
Tack för all hjälp!
/Harald
Skriv svar