PIC programmering i C - Kompilator?

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Nej. Mikroelektronikas dokuemntation imponerar inte speciellt...

Det enda jag hittar är under "New Projekt" på sidan 22 i MikroC manualen...
Men det har du säkert redan sett, eller hur ?
micke.prag
Inlägg: 79
Blev medlem: 22 juni 2006, 16:11:17
Ort: Lund
Kontakt:

Inlägg av micke.prag »

Du kanske kan posta ditt program så att vi kan testa?
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

squiz3r: MikroC är ett ganska trevligt program... men jag har upplevd att det inte "har alla hästar i stallet" och jag är ganska säker på att du inte dör av att kolla att allt är rätt.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det hjälper ju inte mycket om det är config uppsättningen som
är oklar, och det görs (tydligen) i själva IDE'n, inte i koden.
Men om det *kan* göras i koden så är det normalt bättre...

> Jag använder XWISP och där kan man inte ställa in det vad jag vet?

Nej, det förväntas att HEX filen är komplett från början.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Ehh.. :oops: Nu skämms jag riktigt mycket!

Problemet är löst, och det hade ingenting med kompilatorn eller det nya språket att göra. Det var jag som försökte köra en 16F877A på intern osc, vilken inte existerar! :shock:

Förlåt att jag upptog er tid till sånna här fåniga fel..

Mvh. Daniel
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Nåja... det är väl inte så illa... du har lärt dig något då och MÅNGA går igenom dag efter dag utan att göra det.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

:) Nu har jag kommit vidare i programmeringen. Utväcklingen går snabbt i ett sånt här språk, jag började med att få en LED att blinka på olika sätt med "delay_ms(XX);" funktionen och nu har jag använt timer0 och timer1 också. Håller på att göra ett program för att styra ett servo från serieporten med hjälp av interuppt från timer0. Sen måste jag bara lära mig att använda ingångar typ knappar m.m.

Mvh
micke.prag
Inlägg: 79
Blev medlem: 22 juni 2006, 16:11:17
Ort: Lund
Kontakt:

Inlägg av micke.prag »

Finns en färdig Button()-funktion i Util-biblioteket om man vill använda knappar.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Kolla bara upp hur de olika färdigförpackade funktionerna igentligen fungerar.
De kanske låser upp processorn lite mer än vad du räknar med. T.ex så
är det ovanligt att en funktion som delay_ms() har något användningsområde
i en riktig applikation. Normalt vill man inte låsa upp processorn på det sättet.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

>..delay_ms() har något användningsområde i en riktig applikation. Normalt vill man inte låsa upp processorn på det sättet.
Du menar att det är en mjukvaru delay eller? Den fungerar ungefär likadant som mjukvarulopen jag gör i ASM, dock är det inte en subroutin som man kallar på utan den ligger i programmet så det blir en ny varje gång.. Tar onödigt mycket platts, men ensålänge har jag inget problem med det.

Menar du att man ska använda en timer istället eller?

Micke.prag: Jepp, jag såg den tidigare. Den verkar bara läsa av IO pinnen och sen vänta en stund som "debounce". Så den kanske kan vara bra ibland men det är likabra att lära sig hur man gör själv :)

--

Jag har fått USART'en att fungera i C nu också, dock har jag ett litet problem med "delay_us(XX)" funktionen.. Det verkar inte som om den accepterar att man skickar en variabel till den, utan att man bara kan skriva in siffrorna dirrekt..

Mvh
Användarvisningsbild
Icecap
Inlägg: 26659
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

På min hemsida (under "Freebies") finns det ett projekt som styr 13 servon med en PIC16F628A, källkoden (som är med) är gjort i MikroC...

Alla dessa "delay_us", "setup_uart", "lcd_out" osv. har jag aldrig använd helt enkelt för att de är odukomenterat i den mening att deras källkod inte är med, alltså har man inte koll på vad man egentligen gör.

Att du inte kan skicka en variabel till "delay_us" är bara bra, då släpper du att använda den!
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Antagligen kan du skicka en symbol/konstant till delay_ms(), men du kan
kanske inte skicka en variable som inte är har ett känt värde vid "compile-time". Så det beror lite på vad du menar med en "variabel"...

> Du menar att det är en mjukvaru delay eller?

Visst är den det !

> Menar du att man ska använda en timer istället eller?

Jag menar att den övergripande applikations designen styr vad man
ska använda. Ofta innebär det att olika "delays" kombineras ihop till
någon gemensam klocka som servar flera olika behov i applikationen.
Att ha en massa delay_ms() är att be om problem senare vid underhåll
av applikationen.

Eftersom delay_ms tydligen skapar en specifik kodsnutt för varje anrop
så är det ju ganska självklart att parametern *måste* vara känd
vid compile-time...

Det är inget fel i sig på programvaru-delayer, men när det blir så pass
långa tider så att det går att räkna i hela ms så är det nog inte så praktiskt.
Är det däremot ett tiotal us så är det mindre problem.
Men, i slutänden så är detta, så klart, väldigt applikationsspecifikt...

> Den verkar bara läsa av IO pinnen och sen vänta en stund som "debounce".

Och det är det där med "en stund" som är problemet. Du kanske vill
göra något annat under tiden än att "sitta fast" i just den rutinen.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Tack Icecap! Jag har läst igenom den koden, men den är lite för avancerad, så jag fattar inte allt :).

Men jag tänkte att jag kan använda timer2 för att göra den pausen som behövs för att styyra servona (mellan 1 och 2ms). Timer0 används nu för att göra en 13ms pause mellan att servon får sina signaler.

Jag tänkte att jag har en kristall på 19,17Mhz så ställer jag timer2 på 1:1 prescale, och laddar PR2 registret med 240 (decimalt). Då kommer jag få ett interuppt från timer2:

19 170 000Hz / 4 (Fosc/4) = 4 792 500Hz

4 792 500Hz / 240 = 19968,75Hz

1/19968,75Hz = 50,078µS

Alltså får jag ett interruppt ca. var 50'e mikrosekund, då kan jag öka en variabel och när den har kommit till 30 (från 0) så har det går 1,502mS.

Så då kan jag alltså styra servona med en precision på 50µS vilket räcker fin fint för mig.

Det jag funderar över är bara att jag ska hinna med en seriel komunikation där jag ska överföra ca. 10byte mellan varje gång jag uppdatterar servona.. Så frågan är om jag hinner det..

Vad tror ni om detta sättet?

Mvh
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Om seriekommunikationen sker via hårdvaru-USART, så går det ju inte
åt speciellt mycket kod till det. Sedan så är väl servo-styrningen
interruptstyrd, så den kommer i alla fall att avbryta annat arbeta och
göra det den behöver.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Jag tänkte att under den tiden som timer2 rullar kanske jag får ignorera USART'en och se till att jag får datan efter att jag har skickat pulsen till servona, då har jag ju ca. 10mS på mig, räcker det till 10byte tror ni?

Den seriella komunikationen ska gå mellan två PIC'ar, den ena kommer få köra på mjukvaru USART, men denna ska kunna gå på hårdvaru USART'en.

USART'en är väll det snabbaste sättet att skicka data mellan PIC'arna? Jag funderade på manchesterprotokollet (stavning?) men det tog ca. 25mS per byte..

Mhv
Skriv svar