sram fråga (Atmel)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

sram fråga (Atmel)

Inlägg av Samot »

Hej! ( Atmel 8535 )
Jag har skrivit ett program för att spara undan tidslängden på varje bit i ett pulståg. Detta ska sparas i sramet för att sedan kunna återges på en utgång.
Måste man på något sätt initiera sramet? Jag vet iaf att den sparar något och det är rätt antal bitar som den 'tar tiden' på. Vet inte vad det är som jag kan ha missat. Mkt tacksam för råd.Mina subrutiner för spara och hämtning av tiden ser ut så här:

ldi sramadress,0x60

laddatid:
mov XL, sramadress ;sätt adress
ldi XH, 0x00
ld tid,X ;hämta timervärdet från SRAM:et
inc sramadress ;öka adressen
ret

sparatid:
mov XL, sramadress ;sätt adress
ldi XH, 0x00
st X,tid ;spara tid
inc sramadress ;öka adressen
clr tid
ret
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Nej, du behöver inte inititera srammet.

Dina spara/hämta-rutiner fungerar fint i AVRStudios simulator iallfall. Jag skulle tippa på att det är nåt annat som skiter sig. Du får prova att singelsteppa sig igenom koden själv och se vart det blir fel.

Du vet väl hur man använder simulatorn/debuggern i Avrstudio? Om inte - lär dig det, den kanske inte är den bästa här i världen, men jag tycker att den fungerar aldeles utmärkt för att lösa smärre problem.

Edit: Sätter du sramadress til 0x60 både i början på inläsningen och utskickningen på bitarna? Hur har du koll på hur mycket du har läst in och kollar du det variabeln när du skickar ut datat sen oxo?
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

Inlägg av Samot »

ok!
Japp, jag vet hur man använder den. Enligt den så finns det inga fel. Jag har provat det mesta man kan tänka sig också för att se så det inte är något annat som spökar. Det jag inte är 100 på är att den hämtar rätt värde från srammet, men som du/ni ser i min laddatid subrutin så borde den ju göra det! Detta är ett mysterium?!?
Edit: Japp, jag sätter sramadressen till 0x60 och berättar hur många minnesplatser den har framför sig att hämta.
Användarvisningsbild
PaNiC
Inlägg: 2610
Blev medlem: 15 augusti 2003, 22:16:15
Ort: Skånelandet

Inlägg av PaNiC »

Kan inte se något direkt fel, men du kan lika gärna öka adressen med

"ld tid, X+" och "st X+, tid"

Detta ökar X med ett efter läsningen. S.k. post-increment.
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

Inlägg av Samot »

Japp, gjorde så först. Men efter att ha provat allt som kan ha varit fel så testade jag som det är nu och lät det stå kvar så!
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Men om du först manuellt lägger in lite roliga värden i 0x60 och uppåt och sedan "set next statement"'ar till början på din utskickningsrutin. Vad händer då?

Läser den rätt värde men innan du har använt värdet så har det hunnit förstöras?

Fungerar rutinen som pillar ut bittarna på utporten korrekt?

Har du interrupt påslaget i burken som kanske inte sparar undan allt som måste sparar och därför förstör nåt register eller flagga som är viktig?

Om du inte är säker på att inläsningen fungerar, hårdkoda in värden som du känner igen enkelt på utgången istället för att läsa in dom. Och kör programmet på normalt sätt.
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

Inlägg av Samot »

När jag läser bitarna från sram för att skriva ut som på en port så så tillåter jag interrupt.
Interruptet körs när timern får owerflow. Själva interrupt rutinen är enbart att byta status på utgången, alltså var det en etta blir det en nolla och tvärt om. Utsignalen moduleras alltså i 38khz. Kan inte se att den förstör min tidsvariabel på något sätt.
Alltså:

Hämta tid, slå på interrupt, vänta så länge som tiden var, slå av interupt. upprepas lika många gånger som antal bitar jag just har läst in i srammet.

Jag har kontrollerat att den moddas i 38khz
Samot
Inlägg: 311
Blev medlem: 15 november 2004, 18:32:13

Inlägg av Samot »

Jag vet felet!!
Tiden det tar för den att switcha läge på utgången stör nedräkningen av min variabel tid! Tack till er som hjälpt till.

Tar samma tråd till en följd fråga, går det att pwm´a en utgång parallellt med att ett program körs eller måste man via ett interupt ställa om utgången? Alltså jag tänker mig att man ställer in ett register så ligger det och sköter pwm´ningen?
matseng
Inlägg: 2360
Blev medlem: 16 september 2003, 17:18:13
Ort: Dubai, United Arab Emirates
Kontakt:

Inlägg av matseng »

Bra att du hitade felet...

Jodå, har cpn'n hårdvaru-pwm så går det aldeles utmärkt, och datablader har både Counter/Timer0 och 2 pwm. Det är bara att ställa in registrerna så rätt så skickar den ut ett pluståg med vald dutycycle (och i viss mån frekvens).
Skriv svar