Sida 2 av 2
Re: Problem med Interrupt AtMega168 @ 16MHz
Postat: 10 april 2010, 21:04:23
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.
Re: Problem med Interrupt AtMega168 @ 16MHz
Postat: 10 april 2010, 21:47:52
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...
Re: Problem med Interrupt AtMega168 @ 16MHz
Postat: 11 april 2010, 09:16:02
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
Re: Problem med Interrupt AtMega168 @ 16MHz
Postat: 11 april 2010, 09:45:54
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

Re: Problem med Interrupt AtMega168 @ 16MHz
Postat: 11 april 2010, 10:50:28
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
Re: Problem med Interrupt AtMega168 @ 16MHz
Postat: 11 april 2010, 10:53:07
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..

Re: Problem med Interrupt AtMega168 @ 16MHz
Postat: 11 april 2010, 11:10:02
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?
Re: Problem med Interrupt AtMega168 @ 16MHz
Postat: 11 april 2010, 12:13:29
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
Re: Problem med Interrupt AtMega168 @ 16MHz
Postat: 11 april 2010, 12:31:13
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
