Sida 1 av 1
Problem med att få igång en PIC
Postat: 14 november 2012, 18:20:10
av kaazaa
Hej!
Nu är det förstå gången jag skriver här, så ni får vara lite snälla mot mig:D
Har letat i forumet men ej hittat svar på min fråga.
Nu är det så att jag för knappt två veckor sen köpte en PIC18F458. För att prova den körde jag med enkel uppställning med en lysdiod för att prova mig fram lite i taget med att programmera uC i C,(Använder CCS C som kompilator och MPLAB som ide).
koden enligt nedan
Kod: Markera allt
#include <18F458.h>
void main()
{
SET_TRIS_d(0x00);
while(1)
{
output_high(PIN_D2);
};
}
Nu till mitt problem, som är att Lysdioden vägrar lysa har provat sätta den mot andra pinnar men samma fick samma resultat. Har provat lägga till +5v och 10K resistor mot MCLR pinnen också men hjälpte inte. Använder PICKit2 som programmerare och den känner igen PICen och skriver till den. Har även provat med samma sak med en PIC16F690 och där funkade det att få lysdioden att lysa.
Så jag undrar om det är något jag gjort fel eller är det fel på PICen.
Tacksam för svar!
Re: Problem med att få igång en PIC
Postat: 14 november 2012, 18:25:29
av MicaelKarlsson
Avkopplingskondensator? Kopplat in ev. andra pinnar som "måste" kopplas in på PIC, antar att den har intern oscillator.
Skall du inte ha strömbegränsningsmotstånd till lysdioden?
Edit: Hur har du kopplat MCLR (eller vad det heter på PIC?)
Re: Problem med att få igång en PIC
Postat: 14 november 2012, 18:31:01
av kaazaa
Var ska en avkopplingskondensator sitta på PICen?
Vilka andra pinnar menar du? om det är för interna oscillatorn, så funkar det ju utan med en PIC16F690 eller måste man ha det på denna PIC?
Jo du har rätt angående motståndet sitter en 330 ohm där, glömt att rita till det.
Re: Problem med att få igång en PIC
Postat: 14 november 2012, 18:36:47
av Icecap
Först:
DATABLADET
Sedan:
* Det
ska ett motstånd mellan LED'n och portpinnen. Ta 1k, det är ganska lagom.
* Avkopplingskondensator på kanske 100nF (mycket gärna keramisk) mellan VSS och VDD.
* Koppla in
alla VSS!
* Mellan -MCLR och VDD monterar du ett 10k motstånd.
Det var kretsloppet.
Då är det programmet kvar.
Varför skriva SET_TRIS_d? När det är mer korrekt ur C-synpunkt att skriva:
TRISD = 0x00;
Nåväl, småskit. Problemet ligger nog i att du bör läsa databladet ordentligt, speciellt Exampel 9-4 där det tydligt framgår att du måste skriva:
CMCON = 0x07;
för att använda porten för digitala ändamål. När du sedan har gjort det kollar du vad CMCON gör så att du förstår det till senare användning.
Re: Problem med att få igång en PIC
Postat: 14 november 2012, 18:39:40
av MicaelKarlsson
Avkopplingskondensator bör sitta mellan VCC och VDD nära kretsen.
Du bör hitta informationen om oscillator i databladet, likaså information om vad du måste koppla in och hur.
Detta gäller som sagt AVR:
Själv kör jag AVR och där måste man koppla reset till matningsspänning med ett motstånd och en kondensator till jord. Samt spänningsmatning till ADC med mera.
Lycka till!!

Re: Problem med att få igång en PIC
Postat: 14 november 2012, 18:40:31
av kaazaa
Ska göra som ni sagt och och återkomma.
Tack för svaren!
Re: Problem med att få igång en PIC
Postat: 14 november 2012, 19:27:18
av kaazaa
Tackar och bockar för hjälpen.
Efter en del kopplande så funkade det att lysa lysdioden.
Dock när jag hade 10k resistor mellan VDD och MCLR/VPP så sa PICKkit 2 "VPP voltage error".
Kollade upp det där med CMCON och vad jag förstod så används den för att jämföra, och finns på PORTD och är analog. Men jag ändrade inget och lysdioden fungerande ändå?
CCS C kompilatorn vill att man ska skriva "set_tris_x();"
Re: Problem med att få igång en PIC
Postat: 14 november 2012, 19:32:46
av TomasL
Sätt 100k mellan MCLR och VDD, hur är det med oscillator och fuses(configen).
Re: Problem med att få igång en PIC
Postat: 14 november 2012, 19:44:12
av kaazaa
Tack 100k provade jag med det fungerar.
Jag har en kristall på 20Mhz och programmet ser ut så här nu
Kod: Markera allt
#use delay(clock = 20000000)
#fuses HS
void main()
{
SET_TRIS_d(0x00);
while(1)
{
output_high(PIN_D2);
delay_ms(100);
output_low(PIN_D2);
delay_ms(100);
};
}
Re: Problem med att få igång en PIC
Postat: 14 november 2012, 23:56:38
av sodjan
> om det är för interna oscillatorn,
Vilken interna oscillator?
V.v. ange var i databladet det står om den.
> Kollade upp det där med CMCON och vad jag förstod så används den för att jämföra,
Nej, CMCON anger hur man vill använda de pinnar som både har digital och analog funktion.
> ...Men jag ändrade inget och lysdioden fungerande ändå?
Ta för vana att alltid sätta pinnarna så som du tänker använda dom.
Det kan undvika en del underliga problem i framtiden.
Jag hoppas att du köpte 18F458 som surplus eller liknande. De går att köpa
nya (för de som *måste* ha dom t.ex t.ex gamla projekt) men de är kraftigt
överprissatta jämfört med liknande moderna modeller (som dessutom är
betydligt bättre på många sätt).
Re: Problem med att få igång en PIC
Postat: 15 november 2012, 22:54:16
av kaazaa
Vilken interna oscillator?
V.v. ange var i databladet det står om den.
Jag är väl dålig på förklara, menade att jag har kört utan att ha någon kristall med en PIC16F690, men sen om det funkat bra eller dåligt rent tidsmässigt vet jag faktiskt inte, har inte jobbat med uC så länge, utan är en nybörjare. Har bara jobbat lite med lysdioder i assembler.
Nej, CMCON anger hur man vill använda de pinnar som både har digital och analog funktion.
Ta för vana att alltid sätta pinnarna så som du tänker använda dom.
Det kan undvika en del underliga problem i framtiden.
Tack för informationen och tipset. Förstod också att CMCON har med portar som är både analoga och digitala men inte helt säker på varför.
Jag hoppas att du köpte 18F458 som surplus eller liknande. De går att köpa
nya (för de som *måste* ha dom t.ex t.ex gamla projekt) men de är kraftigt
överprissatta jämfört med liknande moderna modeller (som dessutom är
betydligt bättre på många sätt).
Nu blev jag ledsen, för jag köpte den ny, har boken "Mikrocontrollers: från assembler till RTOS", och där har han använt denna PIC så jag körde med den. Vet inte hur jag ska välja eftersom jag är ny inom området och lär mig nu så jag vet inte vad jag behöver och inte behöver i en PIC just nu för att lära mig. Nu är det så att jag inte följer boken utan har den som "hjälp".
När det ändå finns snälla själar som svara på mina frågor, undrar jag vilken compiler är passande till nybörjare, då det känns som CCS inte är helt rätt då den verkar skjilja sig från det vanliga C språket för PIC. Med tanke på det Icecap sa plus att boken skriver på samma sätt som Icecap sa.
Varför skriva SET_TRIS_d? När det är mer korrekt ur C-synpunkt att skriva:
TRISD = 0x00;
Tacksam för alla svar och hjälp hittills.
Re: Problem med att få igång en PIC
Postat: 16 november 2012, 00:08:05
av Walle
Angående att välja lämplig PIC så har jag två tips:
Microchip har ett verktyg (googla "microchip PIC selection tool" så borde du hitta den) där man kan filtrera på olika egenskaper såsom (men inte uteslutande) antal ben, matningsspänning, familj (10, 12, 16, 18, dsPIC, rfPIC, glömde jag nån?), "features" (tex hårdvaru-SPI, bra om man vill använda olika externa kretsar som kommunicerar via SPI, som t.ex. reaktidsklockor och minnen), osv. Man får helt enkelt fundera på vad man vill göra, och därifrån jobba fram en kravspec. Det behöver inte vara så krångligt, hur många digitala in- och utgångar behövs? Behövs analog in, om så hur många och hur hög upplösning? Kollar du i Microchips verktyg så kan du snabbt bilda dig en uppfattning om vilka hårdvarufunktioner som erbjuds.
Angående programmeringen så är mitt tips att börja med databladet för den aktuella PICen (samt datablad för eventuella perifera enheter) samt papper och penna. Börja med att gå igenom databladet och gör en lista på samtliga bitar i konfigureringsregistren behöver sättas. Det är dels de bitar som är odefinierade från start (det framgår i databladet), och dels de bitar som sätts men som måste modifieras för önskad funktion. I databladet framgår det rätt klart hur registren ska sättas, man måste bara vara systematisk och gå igenom allt. Men för de funktioner man inte använder måste man bara kolla på tabellen för registret.
Därefter är det bra att göra ett flödesschema av funktionen i programmet, det underlättar mycket tycker jag, oavsett om man kodar assembler eller C. Flödesschemat gör det ofta tydligt hur man ska lägga upp programmet.
Men som sagt, databladet är din vän! Där har du namn på alla register och bitar, och är programmeringsmiljön någorlunda vettig så används namnen i databladet rakt av i programmet.
Jag är för övrigt också färsk på PIC-programmering, jag höll på lite för 10 år sen, men det mesta har fallit i glömska.
Re: Problem med att få igång en PIC
Postat: 16 november 2012, 00:28:47
av sodjan
> menade att jag har kört utan att ha någon kristall med en PIC16F690,
OK, det fungerar helt OK, en 16F690 har ju en intern oscillator.
Jag lästa antagligen lite fel.
> Nu blev jag ledsen, för jag köpte den ny, har boken "Mikrocontrollers: från assembler till RTOS",
> och där har han använt denna PIC så jag körde med den.
Ja men i *så* fall är det helt OK! Har man redan ett utbildningsmaterial som
använder en viss modell, så ska man så klart köra med den. De grundläggande
principerna är ganska lika i alla fall (förutom skillnaderna mellan PIC16 och PIC18)
och du kan alltid senare kompletera med lite modernare modeller när boken har
"tagit slut", så att säga...
Re: Problem med att få igång en PIC
Postat: 16 november 2012, 00:55:28
av kaazaa
Tacksam för alla svar och all hjälp jag fått!
Ett extra tack till dig sodjan som gjorde att jag slipper ha mardrömmar på grund av mitt PIC-uC val

Re: Problem med att få igång en PIC
Postat: 16 november 2012, 09:30:25
av Glenn
För att göra dej ännu lite gladare så kan jag skriva att det här med att man måste initiera pinnar till att vara digitala är ett EXTREMT vanligt fel
