µC för nybörjare

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Lennart Aspenryd
Tidigare Lasp
Inlägg: 12607
Blev medlem: 1 juli 2011, 19:09:09
Ort: Helsingborg

Re: µC för nybörjare

Inlägg av Lennart Aspenryd »

Hjärtat, är en förunderlig maskin.
Eftersom mitt har stannat, har jag en stor respekt för det!
Utan det, och dess arbete, hade vi inte heller kanske de känslor som är förknippat med den outtömliga maskinen.

Var tacksamma säger Lasp

Idag har jag dagligen ca sju olika mediciner förutom Trombyl, som jag respekterar ;-)
Användarvisningsbild
jesse
Inlägg: 9240
Blev medlem: 10 september 2007, 12:03:55
Ort: Alingsås

Re: µC för nybörjare

Inlägg av jesse »

Ja, då vet du vad "sinusknutan" är för något!

Det här har mitt hjärta åstadkommit:
Bild
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 »

Efter ett par kvällars labbande (eller ja, några timmars eftersom man numer har en nyfödd i huset) så har jag blivit besviken på mig själv.
Jag lyckas inte, hur jag än gör, att klura ut hur jag får igång PWM "modulen" i min PIC16F690 genom att bara läsa databladet. Direkt får jag försvara mig med att jag absolut inte skyller på databladet utan det är mig det är fel på.
I ren irritation så började söka runt på nätet efter tutorials som kunde ge mig en spark i baken men när jag sökte på "MikroC PWM tutorials" så hittade jag bara något tjafs om att använda sig av PWM_Init(), PWM_Start() med mera vilket bara gjorde mig mer irriterad eftersom databladet inte hade nämnt något om detta.

Efter en öl och lite mer funderande så tänkte jag tillbaka på vad sodjan förklarade i en tidigare diskussion. Utan att citera så var det alltså hur man måste skriva i just "mitt" program för att åstakomma dom olika funktionerna.
Detta ledde mig vidare i funderingarna att alltså har MikroC gjort ett bibliotek som är anspassat (vid val) till just min processor och har då "förenklat" det genom att skriva PWM_Start() funktioner med mera...
Självklart fick jag nu igång PWM'en utan problem men istället för att tjuta av glädje blev jag mest besviken på att jag inte löst det genom databladet.

Vidare gick funderingarna.. Men... Är det inte precis så här man har gjort för Arduino? Har då inte utvecklarna gjort ett väldigt användarvänligt bibliotek så att man snabbt ska förstå vad funktionerna uträttar men att kanske inte i det mest effektivaste sätt optimera programmet?

Min egentliga fråga; skriver man inte med C-kod i både MikroC och Arduino IDE men väljer själv hur mycket av det "förberedda" biblioteket man vill använda?
Allt jag har skrivit ovan, är det en tankevurpa?

EDIT: Stavfel
Senast redigerad av Magnus_K 2 mars 2014, 01:24:09, redigerad totalt 3 gånger.
Användarvisningsbild
lgrfbs
Inlägg: 7308
Blev medlem: 28 januari 2005, 15:48:53
Ort: X-län
Kontakt:

Re: µC för nybörjare

Inlägg av lgrfbs »

Sista stycket, är också hur jag har uppfattat saken. Visserligen använder jag microPascal.
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 »

> Jag lyckas inte, hur jag än gör, att klura ut hur jag får igång PWM "modulen" i min PIC16F690 genom att bara läsa databladet.

Eftersom du inte visar något exempel så är ju det hela ganska ointressant.
Ge ett exempel som är skriven enligt "11.3.7 SETUP FOR PWM OPERATION"
så får vi se. Eller ställ någon mer konkret fråga.

> ..."MikroC PWM tutorials" så hittade jag bara något tjafs om att använda sig av PWM_Init(), PWM_Start() med mera
> vilket bara gjorde mig mer irriterad eftersom databladet inte hade nämnt något om detta.

*Självklart* kan inte databladen från Microchip skriva något om en produkt från en annan tillverkare (Mikroelektronika)!
Du kör alltså MikroC. Databladet beskriver hur *processorn* fungerar, för information om hur *MikroC*
fungerar får du kolla dokumentation för MikroC, så klart. Jag utgår från att du har den...

> Min egentliga fråga; skriver man inte med C-kod i både MikroC och Arduino IDE men väljer själv hur
> mycket av det "förberedda" biblioteket man vill använda?

Jo, så är det i princip. Allt som t.ex PWM_Init() gör kan du även göra själv. PWM_Init() gör
sannolikt bara det som beskrivs i "11.3.7 SETUP FOR PWM OPERATION" i databladet.
Det är 5-6 rellativt enkla steg.
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 »

Jag vet inte vart du hittade ett frågetecken i den informationen men jag ber så hemskt mycket om ursäkt om du fann den ointressant. Jag försöker absolut inte säga att det är toksvårt att utföra något liknande, för det är det säker inte. Bara att jag inte klarade av det i nuläget.
Det är väl det lite den här tråden handlar om, uC för nybörjare.
Ska jag vara riktigt ärlig så har jag skrivit ut "11.3.7 SETUP FOR PWM OPERATION" och lagt den framför mig. Skrivit anteckningar och försökt skriva kod på ett så strukturerat sätt jag kan. Bockat av i "setup-listan" och gått vidare.
Som jag försökte förklara så gjorde jag tydligen något fel då jag inte fick det att fungera och pga att jag inte vill irritera någon här i onödan om min okunskap så har jag heller inte postat något försök och bett om hjälp.

Jag har bestämt mig för att få igång PWM'en enligt "11.3.7 SETUP FOR PWM OPERATION" men nu handlade inte direkt frågorna om det. Utan snarare funderingar kring bibliotek med mera.
nifelheim
Den första
Inlägg: 2487
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: µC för nybörjare

Inlägg av nifelheim »

Du har uppfattat det helt rätt med bibliotek. :tumupp:

Det är väl lite hela iden att återanvända kod och slippa skriva allt från början själv.
Kan ju vara bra att slippa skriva TCP/IP stacken själv bara för man vill skicka ett värde över internet :-)
Det gäller inte bara MikroC och Arduino utan nästan överallt.

Kan förstå att det kan verka lite förvirrande att läsa alla inlägg här på forumet från dom som hävdar att man ska skriva allt själv,
och att använda färdigskriva bibliotek är fullständigt förkastligt :)
(dom som skriver så lever nog inte som dom lär)

Men det är ju bra att förstå hur det hänger ihop (det du funderar på nu) vad som tillhör "standard C" (och vilken standard)
och vad som inte gör det.
Det blir ju extra viktigt om du ska flytta din kod till en annan IDE/kompilator.
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 »

> Jag vet inte vart du hittade ett frågetecken

Det gjorde jag inte, det var det som var problemet :-)
Poste lite konkreta frågor (och koden som hör till) istället.

> Som jag försökte förklara så gjorde jag tydligen något fel då jag inte fick det att fungera...

Och du är helt ointresserad av *vad* det är för fel ? :-)

> Det är väl lite hela iden att återanvända kod och slippa skriva allt från början själv.

Visst. Sen är det ju en hel del skillnad i komplexitet mellan att starta PWM modulen
och en hel IP stack. PWM modulen är 5-10 instruktioner medan IP-stacken kan vara
flera Kbyte med kod.
Kaggen
Inlägg: 432
Blev medlem: 29 januari 2005, 03:06:02

Re: µC för nybörjare

Inlägg av Kaggen »

Magnus_K: Nu har du ju redan kommit igång, men jag hittade en manual och där på sid 407 (433 i PDFen) så finns beskrivning av PWM funktionerna med ett litet exempel. Manual.

Håller med dig att det är en liten tröskel innan man kommer igång och förstår alla delar och pusselbitar i en utvecklingsmiljö. Arduino är väl därför den miljö som är enklast för många att börja med. Den döljer effektivt alla detaljer (utvecklingsspråk, kompilator, editor, bibliotek, programmerare och till viss del hårdvara) iaf i början.

Att tänka på oavsett plattform är att de flesta bibliotek som följer med diverse utvecklingsmiljöer är väldigt generella. Dvs dom kanske inte alltid funkar så bra beroende på hur din lösning/projekt ser ut. Jag tänker då närmast på blockerande funktioner och "bakåtkompatibla" funktioner. Nackdelen med Arduinos digitalwrite() t.ex är att den skall vara så generell och kompatibel som möjligt mellan olika arduino hårdvaruplattformar så ofta ligger det kod där som kollar alla möjliga saker och därmed äter lite cycler. Beroende på vad du gör kan det i vissa fall vara helt ok och i andra mindre önskvärt. Men man kan inte både ha kakan kvar och äta den. :)
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 »

Jo det var det exemplet jag utgick från när jag använde det färdiga biblioteket, och det var då det hoppade igång.
För att få mer förståelse om hur saker och ting fungerar på dessa uC's så försöker jag alltid utföra samma funktion men på olika sätt/olika system. Hittills känner jag att jag förstått ytligt hur MicroC's PWM bibliotek fungerar samt Arduino's, nästa steg kommer att vara att lyckas med PWM'en utan något färdigt bibliotek i min PIC (eller ja, färdigt PWM bibliotek).

Det var här jag körde lite fast men ger inte upp utan ska ta det när jag får upp suget igen.

Dit jag vill komma är ungefär det du skriver. Att kunna lära mig olika sätt att utföra funktioner men pga minnesutrymme, hastighet med mera, välja vilket tillvägagångssätt jag vill använda. Lång väg dit men jag hoppas lite poletter trillar ner snart.

EDIT:Stavfel
Senast redigerad av Magnus_K 3 mars 2014, 17:09:32, redigerad totalt 1 gång.
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 »

Google på "PIC16F690 PWM" och det gav bl.a dessa träffar:

http://tobyrobb.com/wordpress/?p=509
Ej speciellt snyggt formatterad kod...

http://www.micro-examples.com/public/mi ... lator.html
Räknar ut registervärden och ger kodexempel.

http://www.microchip.com/forums/m392943.aspx
Ett liknande problem.

http://www.ict.kth.se/courses/IL131V/pw ... dir690.htm
PWM med labbkortet med 16F690 till PICkit2.
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 »

sodjan skrev:...Räknar ut registervärden och ger kodexempel.
Den har jag sparat för jag tyckte det verkade vara ett otroligt användbart verktyg (om man förstår hur man använder det...)

KTH-länken hade jag missat och nu har jag spenderat en stund med den och se på fasen, nu är vi online med PWM igen!
Tyvärr hade jag editerat min första kod så hårt så jag har haft lite problem att jämföra för att klura ut vad jag gjorde för fel.
Dom direkta skillnaderna (som jag hade sparat) var:

Kod: Markera allt

Mitt första försök:                   KTH-koden:

CCP1CON = 0b00001110;                 CCP1CON = 0b00001100;
PR2 = 0x65;                           PR2 = 255;

Sen minns jag att jag försökte skriva något i stil med:

PORTC.RC5 = CCPR1L;

for(i=0; i < 255; i++)
    {
    Delay_us(1000);
    CCPR1L = i;
    }
Lite grusig i ögonen men jag antar det är "PORTC.RC5 = CCPR1L" som kan orsakat problem?
Också ganska ointressant information då jag inte riktigt kan jämföra. Det råkade bli någon översparning i all hets.

Nåja, mycket intressant det här. Kommande händelser får bli att lära mig räkna på frekvenserna (även verifiera detta med skopet) och förstå CCP modulen RIKTIGT. En god bit på vägen är i alla fall att få igång modulen. Tack för det sodjan!

Ja, om någon skulle vilja se koden så kommer den nedan. Dock så är den antagligen ofullständig men den "pulsar" i alla fall LED'en på RC5.
MikroC Pro for PIC, PIC16F690.

Kod: Markera allt

void main(void)
{
  unsigned char i;

  TRISC.B5 = 0;             // Define PORT RC5 as output and enable CCP1 driver (P1D)
  T2CON = 0b00000100;       // 1:1 Postscaler, Timer2 On and Prescaler 1
  CCP1CON = 0b00001100 ;    // Enable Capture/Compare/PWM module
  PR2 = 255;                // PWM period

  while(1)
  {

    for(i=0; i < 255; i++)
          {
           Delay_us(1000);
           CCPR1L = i;
           }
  }
}
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 »

"PORTC.RC5 = CCPR1L" betyder ju att du vill ge 1 bit (RC5) värdet av en byte. Visst, jag har hört om att man kan komprimera kod men inte i den grad!
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 »

:doh:

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

Stämmer det att när jag skrivit PR2=0x65 så har jag förminskat PWM-periodens längd (0x65 = 101?) medans som dom har skrivit så är det "maxlängd" periodtid?
Detta kanske också ställde till det för mig ->
Note: If the pulse width value is greater than the period the assigned PWM pin(s) will remain unchanged.
Går det att ge ett exempel på när man medvetet kortar ner periodtiden? Hänger någorlunda med på att CCP1 sätts 1 när TMR2 och PR2 matchar men av vilken anledning vill man minska PR2 istället för att kanske justera frekvensen? Eller är det inte det man gör... Hmm...

Kanske är ute och svamlar men ska själv ta en funderare under dagen...
H.O
Inlägg: 5913
Blev medlem: 19 mars 2007, 10:11:27
Ort: Ronneby

Re: µC för nybörjare

Inlägg av H.O »

> Går det att ge ett exempel på när man medvetet kortar ner periodtiden?
När du vill ha en specifik frekvens och/eller ett specifikt antal bitars upplösning på dutycycle.
Skriv svar