PIC, simplistisk frekvensgenerator (Fixat)
Postat: 19 november 2012, 23:15:24
Tänkte att jag skulle göra en liten simplistisk frekvensgenerator, väldigt avskalad. Helt enkelt vill jag med en PIC (12F675 i det här fallet, för att jag råkar ha några) läsa in ett analogt värde från en POT och på en pinne skicka ut en frekvens med (ca) 50% duty cycle. Jag vill hålla det extremt enkelt till att börja med, dels på grund av att jag är rostig på PIC och C, och dels på grund av att jag bara behöver en väldigt simpel frekvensgenerator för att kunna komma igång med ett annat intressantare projekt.
Det jag behöver en spark i rätt riktning med är hur jag på bästa sätt utnyttjar mina 10 bitar från ADCn för att generera en frekvens inom ett så stort omfång som är enkelt att åstadkomma.
Det första som slår mig är att helt enkelt köra Timer0 med prescaler/16, dumpa mina två lägsta bitar från ADCn, i princip ladda värdet till TMR0 (+2 för att kompensera för att TMR0 inte ändras på två klockcykler efter skrivning) och ändra pinstatus på interrupt. Kör jag PICen på INTOSC så borde jag då få ett spann från ca 244 Hz till 62.5 kHz, vilket skulle duga mer än väl för mig. Är det tvärkorkat att göra så?
Finns det något sätt som är mycket bättre, och lika bra att köra på direkt?
Jag behöver inte veta vilken frekvens jag ställer in, det räcker med att mäta med oscilloskopet tills vidare. Senare vill jag utveckla frekvensgeneratorn lite, så den får flera områden, visning av inställd frekvens, o.s.v. Men det kommer inte ske innan nyår, och den enklare varianten vill jag ha innan slutet på veckan.
Givetvis blir det någon form av skyddselektronik på utgången, lite beroende på vad som finns hemma, och jag tänkte för övrigt även dra ut ett par fasta frekvenser också.
Edit: Det blir naturligtvis bara 8 bitars upplösning, det kanske är smartare att använda Timer1 och nyttja alla 10 bitar från ADC?
Det jag behöver en spark i rätt riktning med är hur jag på bästa sätt utnyttjar mina 10 bitar från ADCn för att generera en frekvens inom ett så stort omfång som är enkelt att åstadkomma.
Det första som slår mig är att helt enkelt köra Timer0 med prescaler/16, dumpa mina två lägsta bitar från ADCn, i princip ladda värdet till TMR0 (+2 för att kompensera för att TMR0 inte ändras på två klockcykler efter skrivning) och ändra pinstatus på interrupt. Kör jag PICen på INTOSC så borde jag då få ett spann från ca 244 Hz till 62.5 kHz, vilket skulle duga mer än väl för mig. Är det tvärkorkat att göra så?

Jag behöver inte veta vilken frekvens jag ställer in, det räcker med att mäta med oscilloskopet tills vidare. Senare vill jag utveckla frekvensgeneratorn lite, så den får flera områden, visning av inställd frekvens, o.s.v. Men det kommer inte ske innan nyår, och den enklare varianten vill jag ha innan slutet på veckan.
Givetvis blir det någon form av skyddselektronik på utgången, lite beroende på vad som finns hemma, och jag tänkte för övrigt även dra ut ett par fasta frekvenser också.
Edit: Det blir naturligtvis bara 8 bitars upplösning, det kanske är smartare att använda Timer1 och nyttja alla 10 bitar från ADC?