Se där ja, då är vi minst två med den vanan. Ett typiskt "solid code" trick.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.
Problem med Interrupt AtMega168 @ 16MHz
Re: Problem med Interrupt AtMega168 @ 16MHz
Re: Problem med Interrupt AtMega168 @ 16MHz
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...
Tycker att TS ska editera sitt första inlägg för det förstör fortfarande bredden...
- 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
Ä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
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
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
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

- 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
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
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
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..
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
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?
- 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
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
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
Den har två 8 bitars och en 16 bitars.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?
En 8 och en 16 bitars timer har två OC units var. Så möjligheterna är enorma
