Problem med Interrupt AtMega168 @ 16MHz

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Gimbal
Inlägg: 8687
Blev medlem: 20 april 2005, 15:43:53

Re: Problem med Interrupt AtMega168 @ 16MHz

Inlägg av Gimbal »

jesse skrev:Därför skriver jag alltid > "mer än" istället för "lika med" == när jag ska jämföra saker som räknar upp... för säkerhets skull.
Se där ja, då är vi minst två med den vanan. Ett typiskt "solid code" trick.
Användarvisningsbild
E85
Inlägg: 1274
Blev medlem: 29 maj 2007, 16:24:19
Ort: Övik

Re: Problem med Interrupt AtMega168 @ 16MHz

Inlägg av E85 »

Fast vill man ha likadan kod i övrigt bör man isåfall använda '>=' istället annars måste man subtrahera 1 i högerledet.

Tycker att TS ska editera sitt första inlägg för det förstör fortfarande bredden...
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Problem med Interrupt AtMega168 @ 16MHz

Inlägg av Swech »

Är det inte smidigare att deklarera längderna av arrayerna med en konstant istället som nu med ett fast tal 299.
Då kan du jämföra med din konstant längre ned i koden.
Ändrar du musiklängden så ändrar du bara på 1 ställe......(+ inläggning av ny musik)

Swech
myrek
Inlägg: 38
Blev medlem: 7 april 2009, 09:52:15

Re: Problem med Interrupt AtMega168 @ 16MHz

Inlägg av myrek »

Swech: Jo det är klart smidigare att deklarera dem som en konstant. Jag har städat upp i koden betydligt nu. skall lägga upp allt så fort det är klart.
har nu lagt alla arrayer i FLASH istället för SRAM och det verkar fungera ganska bra. Timingen är inte lika bra som när all data ligger i SRAM men jag tror det duger.
Nästa steg blir att skaffa sig en lite biffigare uC med 2 eller 4k sram. Då jävlar :)
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Problem med Interrupt AtMega168 @ 16MHz

Inlägg av Swech »

Jag vet inte hur man skulle gjort i C men i assembler hade jag använt mig av
en 16 bitars timer och capture enheten istället. Då hade hårdvaran i processorn skött om räknandet automatiskt
istället som nu med mjukvaruräknare.

Läsa från flash i assembler går i princip lika fort som att läsa från RAM

Swech
Användarvisningsbild
AndLi
Inlägg: 18304
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Problem med Interrupt AtMega168 @ 16MHz

Inlägg av AndLi »

Varför sätter du inte upp timerns output compare unit istället? Då kan du enkelt sätta det värdet och slippa räkna hur många interrupt du får. Och du får massa tid över till andra saker...

swech tänkte visst precis samma sak samtidigt (har gjort ett projekt med tekniken jag tänker på och det funkar fint i c med..:)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: Problem med Interrupt AtMega168 @ 16MHz

Inlägg av jesse »

Givetvis använnder man timers till detta. Men orsaken till att inte jag föreslog det var att han ska ha tre stämmor - och då behövs tre timers. Tror väl att Atmega168 bara har två? Nu verkar det ju dessutom fungera i mjukvara. Om det blir nån tid över till annat är en annan fråga, men det kanske inte behövs här?
Användarvisningsbild
Swech
EF Sponsor
Inlägg: 4750
Blev medlem: 6 november 2006, 21:43:35
Ort: Munkedal, Sverige (Sweden)
Kontakt:

Re: Problem med Interrupt AtMega168 @ 16MHz

Inlägg av Swech »

Det går att göra såhär då.
Låt timern köra 0-65535.
Beräkna capture punkterna för alla 3 stämmor.
Använd capture modulen för att skapa interupt.
Sätt capturen till stämman med kortaste värdet.
Vid capture interrupt så ställ om capture värdet till nästa högre stämma värde.
Efter 3 stämmor ... börja om...

Det är kanske inte något direkt för nybörjare men det är fullt möjligt.

Det är en bra metod att t.ex. skapa ett flertal kombinerade mjuk/hårdvaru PWM utgångar från endast 1 timer....

Swech
Användarvisningsbild
AndLi
Inlägg: 18304
Blev medlem: 11 februari 2004, 18:17:59
Ort: Knivsta
Kontakt:

Re: Problem med Interrupt AtMega168 @ 16MHz

Inlägg av AndLi »

jesse skrev:Givetvis använnder man timers till detta. Men orsaken till att inte jag föreslog det var att han ska ha tre stämmor - och då behövs tre timers. Tror väl att Atmega168 bara har två? Nu verkar det ju dessutom fungera i mjukvara. Om det blir nån tid över till annat är en annan fråga, men det kanske inte behövs här?
Den har två 8 bitars och en 16 bitars.
En 8 och en 16 bitars timer har två OC units var. Så möjligheterna är enorma :)
Skriv svar