µC för nybörjare

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: µC för nybörjare

Inlägg av Magnus_K »

Ah... nu börjar det sjunka in.. Bra, detta ska labbas med!
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: µC för nybörjare

Inlägg av sodjan »

> istället för att kanske justera frekvensen?

Hela idén med PWM (Pulse Width Modulation) är att justera pulsbredden.
FM (Frequency Modulation) är något helt annat...

Det normala är att man väljer en lämplig frekverns för det aktuella fallet.
Det beror på vad det är man ska göra. Notera också att olika grundfrekvens
även påverkar upplösningen man kan få, se tabellerna 11-2 och 11-3.
Generellt så ger lägre PWM-frekvens högre PWM-upplösning.

> Fick för mig att jag var tvungen att skriva PWM-bitarna till porten men det går ju givetvis inte...

Lite oklart vad du menar med "PWM-bitarna". Men PWM modulen är ju självständig
efter att den har initierats och startats. Sen behöver man enbart justera CCPR1L
för att ändra pulsbredden. Att skriva till I/O pinnen sköter den om själv.

Om du kör PWM modulen så har den helt hand om PA1/RC5, du ska
aldrig skriva till den pinnen själv från koden!

> Stämmer det att när jag skrivit PR2=0x65 så har jag förminskat PWM-periodens längd.

Eller det som också kallas, ökat frekvensen. :-)
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: µC för nybörjare

Inlägg av Magnus_K »

Du förstod mig rätt sodjan.
Och jag hade bestämt mig för att jag på något sätt var tvungen att skriva ut PWM-modulens registervärde(?) på I/O pinnen, vilket alltså inte behövdes.
Väldigt spännande det här. Vilken skön känsla det måste vara att känna att man har full koll på detta och kan utan vidare bestämma frekvensen, duty_cycle och upplösning.
Ett mål är uppsatt!
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: µC för nybörjare

Inlägg av sodjan »

Kul! :-)

Ja, jag förstår att det var rörigt om du trodde att du själv skulle hantera
själva I/O pinnen... :-) Det måste ju ha blivit helt uppåt väggarna... :-)

Som sagt, "set-and-forget" som det kallas. Ställ in PR2, CCPR1L
och CCP1CON så snurrar det på av sig självt efter det. Du behöver
inte göra någonting alls förrens t.ex pulsbredden ska justeras.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: µC för nybörjare

Inlägg av Magnus_K »

Fin fint, nu börjar det här bli riktigt roligt! Jag har jobbat på den här inlägget i en timma nu för så fort jag skrivit en fråga och sen kontrollerat mig själv så har jag kommit på svaret själv. Dock så kvarstår det en undring.

Jag har riggat upp skopet och får upp en vacker PWM-period där. TIME/DIV inställt på 50us och perioden sträcker sig över 5,2 "rutor". Detta borde innebära att en period är uppmätt till 50us * 5,2 = 260us vilket i sin tur borde bli 3846 Hz (1'000'000 / 260).
Det där blev nog rörigt att läsa men jag vill få med all information då det kanske är fel redan vid det här skedet...

Enligt databladet ska jag använda mig av följande formeln för att räkna ut en periodlängd (frekvensen):

Kod: Markera allt

PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)
Här använde jag följande:

PR2 = 255
TOSC = 0,125 us (1/8'000'000)
Prescale = 1

Detta resulterar i 7812,5 Hz vilket jag räknar med är ca det dubbla. Kan inte vara mer precis för mitt gamla skop är lite "hoppigt".

Med tanke på formeln, tänker jag rätt att den handlar om att först "flytta upp" PR2 värdet ett steg då den börjar räkna med 0. Sedan multiplicera med tiden för en instruktionscycle för att slutligen multiplicera med prescalern, dvs skalar upp frekvens men minskar upplösningen.
Rätta mig hemskt gärna i allt tok.

Hmm, jag får en känsla av att jag räknat rätt och även mäter rätt men jag har missat något... Typ att jag inte kan få högre PWM frekvens utan att börja leka med "skalningen".

Om någon har tid och lust så får ni hemskt gärna peka mig i rätt riktning. Helst inte peka direkt på felet men kanske ge mig en hint.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: µC för nybörjare

Inlägg av sodjan »

Du får alltså ungefär halva förväntade frekvensen.
Notera att en 16F690 har en intern oscillator som *kan* gå i 8 MHz,
men om man inte ställer in något så är 4 MHz default efter power-on.
Se "REGISTER 3-1: OSCCON: OSCILLATOR CONTROL REGISTER".
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: µC för nybörjare

Inlägg av Magnus_K »

Väldigt bra tanke men den var/är inställd på 8 MHz.

EDIT: Ska kolla upp detta mer idag så jag inte missar något. Det låter som en väldigt trolig orsak nämnligen...
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: µC för nybörjare

Inlägg av sodjan »

Det förutsätter att du någonstans ändrar i OSCCON.
Jag minns inte om det har varit med i det som visas.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: µC för nybörjare

Inlägg av Magnus_K »

Du hade helt rätt!

Efter ställt in OSCCON registret så stämde frekvensen klockrent. Tack för det!

Nu är jag dock lite fundersam... När jag skapar projektet i MikroC så får jag där "ställa in" frekvensen. Configurationen ser ut som nedan. Nu ska jag sluta förutsätta så mycket men jag trodde dessa fuses och inställningar implementerades i hex-koden men utan att jag såg den i själva kod fönstret.
Sen om specifikt ställer in OSCCON-registret så körde den över dessa konfigureringar.
Hade tydligen helt fel så det får bli att läsa mer om det ikväll.

Men gott, nu ska här räknas och mätas!
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: µC för nybörjare

Inlägg av sodjan »

Inställningen i MikroC är *enbart* för att tala om för kompilatorn vilken hastighet
du *tänker* köra med så att den kan beräkna Delay_ms() korrekt. Delay_ms() tar
alltså inte tid så att säga, utan den kör en program-loop som tar angivet antal
millisekunder vid en viss antagen hastighet på processorn.

Om du sedan väljer att köra med en annan hastighet så blir ju dessa fel, så klart.
På samma sett som allt annat som förutsätter en viss hastighet på processorn,
t.ex PWM beräkningen som du gjorde.
Användarvisningsbild
Icecap
Inlägg: 26635
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: µC för nybörjare

Inlägg av Icecap »

Magnus_K: de inställningar du gör som berör FUSE BITS (CONFIG) kommer att bli implementerat i hex-filen. Inget annat! Precis som sodjan skriver är den hastighet för att ange för de funktioner som finns i MikroC som är beroende av den hastighet, inget annat.
Senast redigerad av Icecap 5 mars 2014, 13:53:49, redigerad totalt 1 gång.
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: µC för nybörjare

Inlägg av Magnus_K »

Kanon, då hänger jag med, tack!
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: µC för nybörjare

Inlägg av Magnus_K »

Ville testa så jag förstått er rätt så jag försökte göra som man kanske normalt gör, att önska en frekvens och duty_cycle för att sen ställa in PWM-modulen utefter det.
Drog till med 125KHz och 25% duty_cycle (för synlighetens skull). Ändrade klockan till 2Mhz också för att röra till det lite mer.
Med lite matte så borde alltså en period ta 8us där duty_cycle är 2us.
Skopet inställt på 2us/DIV.
Resultatet (ursäkta kvalitén men jag får passa på i mörkret när ungarna sover...):
DSC00552.JPG
Kanske inte märkvärdigt för er men jag tänker flina hela dagen!
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
sodjan
EF Sponsor
Inlägg: 43249
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: µC för nybörjare

Inlägg av sodjan »

Va bra!
Sover ungarna "i mörkret" 14:45 !?
Användarvisningsbild
Magnus_K
EF Sponsor
Inlägg: 5854
Blev medlem: 4 januari 2010, 17:53:25
Ort: Skogen mellan Uppsala-Gävle

Re: µC för nybörjare

Inlägg av Magnus_K »

Hehe nja, den 2 veckor gamla kan jag inte riktigt styra sovmönstret på men sova i mörker kan hon få göra när hon väl behagar. Den andra fick hela natten förstörd pga den förstnämnda så hon får sova en liten snutt nu också. Lite OT men ja, så är det här!
Skriv svar