Gudinna Wiki VisaÄndraBifogaVersionerUppdateratSökKarta

Turbo-Mattias PIC bygge i c för att styra en detalj med flera PIC kretsar

Hej Turbo-Mattias håller just nu på med ett litet projekt med serial överföring till stationär dator, det kan ta lite tid innan jag själv får det att fungera men kan berätta om mina egna erfarenheter när det är klart.. Jobba på under tiden! Om du känner dig osäker på C så föreslår jag att du skaffar en C programmeringsbok, så att du lär dig hur man programmerar C funktioner, flödesprogrammering med IF och WHILE loopar samt kikar på hur man gör bitvisa operationer med bitvis AND och OR samt bitroteringar. Det mesta kommer falla på plats om du kan grunderna. Referensdokumentationen till PIC kretsen du använder kombinerat med hlälpfilerna till dinC kompilator är i stort sett all info du behöver. Det är en del pill att koppla kretsarna rätt fysiskt så ha tålamod och kontrollera ditt bygge flera gånger med mätinstrument och liknande. En multimeter är vad jag själv använder mig av som primärt testinstrument. //xerxes

Hej Xerxes,

Låt mig börja och tacka för hjälpen. I försättningen kan du kalla mig Turbo-Mattias. Mina polare skämtsamt kalla mig dumskallen när de är sura på mig.
Jo, Jag har tänkt använda en c-compilator vid namn ”MP LAB”.
Jag såg på något ställe att man bör kunna fixa det projektet att funka om man använder dessa komponenter. Noterat att jag vill använda endast en PIC.
I ett testprogram kunde styra tre dioder, dock så använder jag inte samtliga komponenter då.
Som sagt behöver jag hjälp med programmeringen i C som jag inte alls hållit på med tidigare.

Jag hittade massor med information på www.ccsinfo.com , dock inga direkta koder som jag tyckte passade mitt syfte.
Om du har lust och tid att föreslå ett sätt och koda i C, så är jag tacksam. Mitt problem är som sagt att jag inte sysslat med C-programmering och har därmed svårigheter med det.

Med vänlig hälsning

Turbo-Mattias

Hej dumskallen, (jag tror inte du är så dum och om du vill bli kallad något annat så säg det så kan vi ändra rubriken) :)

Vilken PIC C kompilator använder du?
Hur långt har du kommit med programmeringen?

Varför har du valt att bygga projektet med flera PIC kretsar när man kan klara sig med färre? Hur ska kommunikationen fungera mellan kretsarna?

Har du testat bygga ett mindra PIC projekt där man tex bara får två st lysdioder att blinka?

Hela den här servern är en "wiki" så om du vill ändra innehållet på den här sidan så är det bara att klicka på "Ändra" knappen ovan! :)

om du vill veta hur den här werbservern fungerar kika då på : Systeminfo och teknik som används samt på bygg sidan!
// Xerxes


Hej!
Trots vissa tips från Xerxes, har jag ännu inte lyckats få ihop koder till följande: i c-språk kan programera PIC16f84a-04/p för följande:
En detalj rör sig i ett x/y-plan. Från två givare i detaljen erhålles två spänningar 0-5V. I projektet används två potentiometrar för att leverera/simulera dessa spänningar. Spänningarna matas in via A/D-omvandlare till processorn.

Om x = y = 0 Volt befinner sig detaljen i nedre vänstra hörnet.
Om x = y = 5 Volt ................................... övre högra hörnet.

Man vill registrera detaljens läge på en diodmatris bestående av 8 x 8 lysdioder. Tänd diod skall visa detaljens ungefärliga läge. De koordinater man erhåller från potentiometergivarna skall man kunna spara i en logfil på en PC.

För att kunna köra detaljen manuellt vill man ha tillgång till ett telefontangentbord 3 x 4. Man ska från tangentbordet kunna mata in x- och y-koordinat med en decimals noggrannhet. T.ex. x = 3.4 Volt och y = 2.8 Volt. Den inmatade koordinaten skall levereras vidare till en x- resp. y-ingång hos detajen.

I projektet användes Volt-metrar för att kontrollera spänningarna. Vid manuell inmatning skall aktuell koordinat sparas i en logfil och presenteras på diodmatrisen.

Notera att jag har följande:
1 st PIC 16F84
1 st resonator
1 st telefontangnetbord 3 x 4
1 st PCF 8591 P AD/DA-omvandlare
1 st MAX 232 CPE
1 st lysdiodmatris 8 x 8
5 st kondensatorer 1.0 uF
En bit Weroboard
2 potentiometrar 1 kohm


Vore tacksam om ngn har ngt förslag på koder i c.
Mvh
Dumskallen, känner sig ännu dummare idag.

Hej Xerxes!
Tack för alla fina tips och detaljerade beskrivning av ditt förslag till lösningar. Jag har de nödvändiga komponenterna som behövs såsom:
2 st PIC 16F84
1 st resonator
1 st telefontangnetbord 3 x 4
1 st PCF 8591 P AD/DA-omvandlare
1 st MAX 232 CPE
1 st lysdiodmatris 8 x 8
5 st kondensatorer 1.0 uF
En bit Weroboard
2 potentiometrar 1 kohm

Jag är lite osäker på hur uppkopplingen skall vara, dvs i vilken ordning skall sitta. Vidare så är jag inte någon vidare bra på att koda "programering i C". Under om du har något förslag. Tack på förhand!
Dumskallen.

Tips

Leta reda på teknisk dokumentation för alla chippen.
Att bygga en konstruktion med två st PIC kretsar kan bli mer komplicerad änn att bara använda en krets. Tänk på att 2 eller 3 trådar måste dras mellan PIC kretsarna för att garantera ett säkert informationsutbyte eller implementera ett entråds kommunikations interface .. (används för vissa termostat kretsar för kommunikation mot microprocessorer)
Personligen har jag inte testat driva två st kretsar med en resonator men antar att det kan gå.
Bygg gärna upp simplare kopplingar inann du försöker få allt att fungera på en gång. Försök få en lysdiod att blinka etc..
Testa en del i taget när du programmerar, att bygga ett större projekt direkt brukar ressultera i många tankefel.

Att rita upp ett kopplings chema kan underlätta tankegångarna.
http://www.expresspcb.com/ExpressPCBHtm/Download.htm har ett gratis cad verktyg för elektronik som är ganska lätthanterligt och gratis att ladda ner och använda ( dom vill att man ska göra ritningar och beställa kretskort från deas fabrik ).
// Xerxes

Problemlösning

Hej!
Är det ngn som har ngt tips om hur man i c-språk kan programera PIC16f84a-04/p för följande:
En detalj rör sig i ett x/y-plan. Från två givare i detaljen erhålles två spänningar 0-5V. I projektet används två potentiometrar för att leverera/simulera dessa spänningar. Spänningarna matas in via A/D-omvandlare till processorn.

Om x = y = 0 Volt befinner sig detaljen i nedre vänstra hörnet.
Om x = y = 5 Volt ................................... övre högra hörnet.

Man vill registrera detaljens läge på en diodmatris bestående av 8 x 8 lysdioder. Tänd diod skall visa detaljens ungefärliga läge. De koordinater man erhåller från potentiometergivarna skall man kunna spara i en logfil på en PC.

För att kunna köra detaljen manuellt vill man ha tillgång till ett telefontangentbord 3 x 4. Man ska från tangentbordet kunna mata in x- och y-koordinat med en decimals noggrannhet. T.ex. x = 3.4 Volt och y = 2.8 Volt. Den inmatade koordinaten skall levereras vidare till en x- resp. y-ingång hos detajen.

I projektet användes Volt-metrar för att kontrollera spänningarna. Vid manuell inmatning skall aktuell koordinat sparas i en logfil och presenteras på diodmatrisen.
Mvh
Dumskallen

Hej!

Låt oss bryta ner problemet och behandla en del i taget.

Problem nr1: Avläsning av detaljens läge med 2st A/D omvandlare.

Eftersom 16f84a-04 inte har inbyggda A/D omvandlare rekommenderas att byta till en PIC rets med inbyggda A/D omvalndalre som PIC16f876 som har 8Kb rom samt en 10-Bit A/D omvandlare. (Förtekning av olika PICmcu och dess speciella egenskaper kan hittas på följande URL http://asp.microchip.com/wwwParamChart/chart.aspx?branchID=1002&mid=&gdir=1010) Priset för 16f876 är relativt låg pga att det är en populär krets samt att man kan köpa den förpackad i chipkapslar lämpade för prototyp byggen.
A/D omvandlaren konverterar voltstyrkan linjärt där 0V motsvarar värdet 0 och 5V (egentligen matningsspänningen) motsvaras av värdet 1024 från A/D omvandlaren. Exempel en voltstyrka på 2.5V kommer avläsas av A/D omvandlaren som taler 512.
Om man delar in talet 1024 i enheter av vilka steg du vill läsa av detaljen (i ditt fall 8 eftersom du vill presentera possitionerna av x och y i en skala mellan 1 till 8) så kommer varje steg deltajen tar ge en värdeökning i A/D omvandlaren med talet 128!
Så för att få ut detaljens possition behöver du bara dela A/D omvandlarens värde med talet 128 för att beräkna x eller y possition för detaljen! Excempel A/D omvandlaren visar talet 512 för benet som mäter x possition och 270 för benet som mäter y pos ger efter beräkningar 512/128=4=x! och 270/128=2=y (avrundat till närmsta tal utan decimaler)!
Problemet löst! // Xerxes
Implementering av avläsning av PICmcu A/D omvandlare (ADC) i C

Problem nr2: De koordinater man erhåller från potentiometergivarna skall man kunna spara i en logfil på en PC

Många PIC kretsar har innbyggt stöd för seriellanslutning via rs-232 USART
serial interface (samma interface som för en vanlig serialport på en PC).
För att underlätta utveklingsarbetet leta efter en C kompilator som har stöd för implementering av standard C funktioner som printf för utmatning till serial interfacet. Excempel på PIC C kompilator med denna funktionalitet är PCW som tillverkas av http://www.ccsinfo.com
Implementering i C kan se lite olika ut beroende på vilken C kompilator man väljer.
Det finns även andra anslutningmöjligheter som te.x via USB (USB interface finns bara på vissa PIC kretsar). Loggningen på PC sidan kan ske via ett vanligt terminalprogram för modem eller via någon egenskapad lösning. // Xerxes
http://www.microchipc.com/sourcecode/#serial - Färdiga lösningar för serial överföring.

Problem nr3: utmatning av valfri voltstyrka från PIC kretsen.

Eftersom PICmcu kretsen bara kan skicka ut antingen 5V eller 0V kontinuerligt så måste en D/A omvandlare kopplas till kretsen. Färdiga lösningar för detta finns för kommunikation med ett D/A chip som heter AD7390. http://www.microchipc.com/sourcecode/PIC_Hi-Tech_C_AD7390_d2a_routines.zip
En simpel lösning som kan användas om motagaren av den analoga signalen är mycket okänslig för brus.. är att frekvensmodulera voltstyrkan genom att låta PIC kretsen skicka ut säg 2.5V genom att mycket snabbt växla mellan 5V och 0V. (Använd med försiktighet..)


Problem nr4: koppla lysdios matisen till PIC kretsen.

Den enklaste lösningen är att använd 16ben på PICmcu kretsen om möjligt. (Säg B och C porten på PIC kretsen, om man vill använda SERIAL överföring så se till att låna två ben på A porten för att frigöra C6 och C7 som anänd vid serial överföringen.)
Benen ska anslutas enligt matrisen nedan där plus polen (anodbenet) för alla LED element ansluts till det B ben som ligger på samma rad som lysdioden, för att inte lysdioderna ska brännas så koppla in ett 220 ohms motstånd mellan pic kretsen och lysdiodsmatrisen.
C0C1C2C3C4C5C6C7
B7
B6
B5
B4
B3
B2
B1
B0
Vill man nu tända lysdioden i övre högra hörnet (x=8 y=8) så skicka ut hög signal på B7 och låt C7 gå ner till jord. övriga B och C ben ska läggas i "float" läge viket gör att benen varken skickar ut possitiv eller jordar (notera att PIC kretsens ben antingen kan ge ut matningsspänning, jord eller vara oinkopplade).

Problem nr5: avläsning av telefonknappsatsen.

Knappsatsen kan konstrureras på liknande sätt som för lysdiods matrisen men i det här fallet behöver man bara använda 7st ben på PIC kretsen.
C0C1C2
B0123
B1456
B2789
B3 0
Om säg knappen 0 är nedtryckt så ska man kunna läsa av en hög signal på ben B3 och C1 samtidigt.
Programmmässigt så måste man kolla av C och B portarna i jämna mellanrum så att man kan detektera knapptrykningar. Samt programmera logik som detekterar enskilda knaptryckningar. Genom att inte acceptera nya knapptryckningar förren knappsatsen återgått till otryckt tillstånd ett antal avläsningar samt att man bara acepterar nya inmatningar om den har blivit nedtryckt en längre tid så kan man programmera bort bruset som uppstår när bryter en strömmbrytare.. Leta efter excempel för att göra "studsfria knappar" med mikroprocessorer för att förstå teorin.

Problem nr6: att kunna använda Problem nr5 och Problem nr4 samtidigt.

Detta problem är av tekninsk problematik då antalet I/O ben är begränsade på PIC kretsen.
En möjlig lösning är att köpa en större PIC krets mer fler ben.
Men det ska gå att lösa genom att koppla in elektroniska buffertkretsar så att man kan använda ett ben på PIC kretsen till flera saker.

.. fortsätter lite senare med förslag på hur man kan lägga upp en programstruktur i C som möjligör för PIC kretsen att kunna göra alla sakerna samtidigt. hoppas detta hjälper en bit på vägen. Mvh // Xerxes

Referens till aktuell sida


Frivillig gåva till stöd för driften av Gudinna Wiki :