Sida 1 av 2
Generera 38Khz m.h.a. CPP pin (PIC16F628A) (MikroC) - HUR?
Postat: 22 januari 2007, 18:49:46
av Nilsson
Ja, precis som rubriken säger så skulle jag vilja ha lite vägledning i hur jag i C får fram pulser på 38Khz på CPP pinnen på en PIC16F628A.
Jag har "googlat" som en galning, men jag kan inte hitta nånting som jag riktigt förstår mig på.
Så finns det någon duktig C programmerare här (klart det finns

) som kan hjälpa mig lite?
Postat: 22 januari 2007, 19:09:46
av sodjan
Det här är inget C problem.
Programmera bara CCP modulen för PWM med rätt värden i registren för
att få 38 Khz. Hur du gör framgår av databladet, kapitlet om CCP modulen.
Finns ingen anledning att googla, allt du behöver veta finns i databladet.
Det är bara 3-4 register som ska sättas korrekt.
Som sagt, det här är inget C problem, man gör likadant oavsett språk...
Postat: 22 januari 2007, 20:29:35
av bengt-re
Säger det samma. Det är därför det alltid är bäst att starta ifrån asm. Har man tur så finns det färdiga funktioner för CCP, interupts, A/D i ens C-kompilator - om inte så är det ju precis som SODJAN säger bara att läsa databladet och ställa in rätt saker i relevanta SFR.
Postat: 22 januari 2007, 21:10:40
av tgr
Vi verkarva många som leker med IR just nu.
Jag försöker göra hinderdetektering till min legorobot.
Efter ha tröttnat på att få allt för dåliga fyrkantsvågor från en 555a
tog jag en pic istället. Kanske lite overkill med en pic men jag har inte heller lyckats läsa databladet tillräckligt noga för å hänga med på hur inbyggda pwm funkar. Så jag gjorde följande!
Kod: Markera allt
while(1) {
PORTA.F1 = 1;
delay_us(13);
PORTA.F1 = 0;
delay_us(13);
}
Postat: 22 januari 2007, 21:18:33
av bengt-re
Usch...
Programstyrda loopar för frekvensgenerering.. Ja, fungerar väl iofs, men....
Vill man läsa samtidigt som man sänder så blir det lite stökigt.... En annan sak, IR-mottagarmodulerna är tämligen känsliga för spännings/ledningsburen störning så mitt tips är att sätta en PIC 10F202 som frekvensgenerator och sätta den precis intill sändardioden så är man helt av med störningsproblemet och då om den bara skall sända så är det jättebra med programmstyrd frekvensgerering.
Lite OT, men gör man så kan man använda ingångarna till att kunna välja på 3-4 olika frekvenser för att kunna minska räckvidden på IR-motagaren om man man känner för det.
Postat: 22 januari 2007, 22:18:36
av Nilsson
aha, tack
sodjan. Det finns ju folk här på forumet som tycker datablad är kul. Men nu är fallet som så att jag inte är en utav dom.
Men jag får ta mig en litten titt ändå
det finns ju mycket information att få
tgr
Vi verkar va många som leker med IR just nu.
Hehe, jo, men jag trodde faktiskt det skulle vara lättare
tgr
Jag försöker göra hinderdetektering till min legorobot.
Precis vad jag försöker göra
Jag skulle använda precis den programmlopen faktiskt, men det var nån/några som sa att det inte funka.
men det kanske var ett sätt att säga: "Använd inte mjukvaruloopar till att få fram en frekvens, det funkar, men det är helt och hållet opålitligt"?
vem vet

Postat: 22 januari 2007, 22:36:59
av tgr
Det blir lite jobbigare när det är hinderdetektering. För då vill man inte bara pulsa 13us på 13us av. Man vill ju göra det i 600us å sen ska den va tyst 600us. Så det blir 2 jobbiga loopar. Så långt har jag inte orkat tänka än.
Jag har hittils bara lyckats vrida de grå för att komma på hur pulserna borde se ut på oscilloskopet och sen gjort 28kHz signalen i picen.
Min plan är som det rekomenderats tidigare att köra en pic separat för IR. Antingen endast genereringen men kanske även detekteringen i samma. Vore smidigt att köra ett litet bussystem på roboten med små moduler inkopplade.
Då tycker jag det kan räcka för mig att ha mjukvaruloopar i den.
Postat: 22 januari 2007, 23:03:28
av sodjan
> Det finns ju folk här på forumet som tycker datablad är kul.
> Men nu är fallet som så att jag inte är en utav dom.
Jo visst finns det saker man kan göra *utan* att läsa datablad, odla morötter t.ex. Då räcker det med att läsa på fröpåsen.
För att sammanfatta det du ska göra för att få en smidig lösning som även fungerar att bygga ut.
- Välj en PIC med CCP/PWM modul (t.ex 12F683 om du vill ha en kompakt modell).
- Ställ in CCP/Modulen för 38 Khz.
- Ställ in en timer (någon annan än den som CCP/PWM modulen använder så klart) så att du får en tidbas för 400-800 us pulserna (eller vad nu din IR-mottagere kräver).
- Skriv logiken för att generera pulserna, enklast baserat på ett avbrott/interrupt från timern i punkten ovan.
Sedan kör själva IR-delen mer eller mindre av sig själv, och din överliggande kod kan fokusera på att sända "kommandon" eller vad IR-delen nu skulle användas till.
Hinderdetektering ? OK, då är det inte ritkigt en traditionell IR-länk, har inte funderat så mycket på det...
En separat PIC som genererar bärvågen (38 Khz) är tänkbar, men jag ser inte att det tillför *så* mycket jämfört med CCP/PWM modulen.
PIC10 är i och för sig små, men inte speciellt "hobbyist-friendly". Visst, de finns även i en 8-pin kapsel, men då kan man lika gärna ta en 12F direkt.
Man kan ha flera PIC'ar ihopkopplade men det skulle jag inte rekomendera till en nybörjare, det tillkommer flera svåra problem speciellt i timingen mellan de olika processorerna.
Postat: 22 januari 2007, 23:06:55
av bengt-re
Yepp, det fungerar superbra att gör frekvenser med programloopar om inte picen skall göra något annat under tiden.
I sista utgåvan så valde jag frekvens med pulslängden på styrsignalen. Simpel seriekommunikation....

Så 4us var en frekvens 6us var nästa och 8us var sista frekvensen (ja, eller något liknande) Och sen sände den 10 pulståg på vald frekvens 600us till och 800us av (eller något liknande...). Bra enkel princip. Enda lilla abret är att 10F bara kör med INTOSC och det blir lite grova steg att variera periodtiden med en hel us. Det går ju finlira med OSCCAL också och behålla samma antal klockcykel i generatorloopen
Postat: 23 januari 2007, 12:58:48
av vfr
Att läsa datablad är ju inte egentligen något man gör för att det är så kul eller för att man har så mycket tid över, även om det i och för sig _kan_ vara kul också. Det är för att lära sig hur man använder prylen!

Postat: 23 januari 2007, 13:13:11
av bengt-re
Gör som jag, ha alltid et utskrivet datablad liggande på dass.... Så har man något roligt att läsa...
Postat: 23 januari 2007, 13:53:16
av sodjan
Oavsett om man läser datablad för att det är kul eller inte
så är det inget man klarar sig utan.
Jag har inga som helst problem med frågor typ "jag har läst det-och-det i
databladet men förstår inte riktigt", jämfört med när det är uppenbart att
man inte ens har orkat öppna det och åtminstånde *försökt* själv.
> Att läsa datablad är ju inte egentligen något man gör för att det är så kul...
Det är väl klart att det är !
T.ex när nya INTOSC kom, eller nya EUSART. Eller CAN/USB modulerna.
Eller något annat nytt i en ny modellserie. Spännade och underhållande läsning !
Postat: 23 januari 2007, 23:23:26
av Nilsson
Hihi, okej.. tack för alla svar.. jag har läst CPP delen i databladet nu. och igen och igen och igen. Men jag förstår fortfarande inte mycket mer om hur man ställer in regristren
Verkar otrooligt krångligt
Det vore jättebussigt om någon kunde citera dom viktigaste punkterna och förklara på lite lägre nivå

Postat: 24 januari 2007, 03:25:34
av bearing
Läs här:
http://www.isk.kth.se/kursinfo/6b4059/pwm/ccpwm.htm
Programexemplet gäller CC5X (en annan compilator) men principen går nog fram.
Postat: 24 januari 2007, 08:55:07
av sodjan
> Det vore jättebussigt om någon kunde citera dom viktigaste punkterna och förklara på lite lägre nivå
OK, du kollade 9.2.2. De 4 stegen ?