Vägledning i kodning

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
fireas
Inlägg: 204
Blev medlem: 26 januari 2009, 12:44:25

Vägledning i kodning

Inlägg av fireas »

Hej!

Håller på att bygga en lampa (i form av en kon) där jag lagt avståndsmätare runtom lampan. Ju längre upp på lampan handen går, desto starkare ljus skall den ge ifrån sig (fler dioder lyser).

Jag kommer att ha ca 20-30 lysdioder där i och jag vill dela in avståndsmätarens intervaller i 3 steg ;
Steg 1: t.ex 8 lysdioder
Steg 2: 8 till = 16 lysdioder
Steg 3 : alla lysdioder

Men jag har inte programmerat mikrochip innan (bara grundläggande java).

- Jag behöver hjälp i hur jag kan få in en viss spänning och bestämma hur många dioder som ska lysa (det som slår mig som lättast är vanlig if sats?). Men hur jag gör detta e jag lost på.

- hur kan jag koppla dioderna? Tänkte mig 3 utgångar med en transistor i varje som driver t.ex 8 lysdioder var. Några förslag på transistorer?

Har ett pickit 2 att tillgå.


Har dessutom en annan grej som typ är lika dan men där vill jag bara ändra blinkhastighet på ett par dioder. Hur kan man styra detta ?
Kommer vara likadant då jag ska styra detta med en skjutpotentiometer och då kommer blinkfrekvensen att variera efter spänningen.

Tips här?


Alla tips/åsikter är välkomna!
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 46989
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Re: Vägledning i kodning

Inlägg av TomasL »

Du behöver börja med elementär processorteknik och även elektronik.
Användarvisningsbild
Icecap
Inlägg: 26652
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Vägledning i kodning

Inlägg av Icecap »

Transistorerna ska kunde klara strömmen helt enkelt.

Programmeringen är inte så svår, ett sätt är en massa if-satser men jag hade gjort en skalning mellan inkommande värde och utgående värde - och det hade jag till båda funktioner, utgående värde används sedan till olika saker.
Användarvisningsbild
fireas
Inlägg: 204
Blev medlem: 26 januari 2009, 12:44:25

Re: Vägledning i kodning

Inlägg av fireas »

Jag fick rådet att göra en A/D omvandling för att få 0-5V till 0-255. Men hur gör jag detta?

Är det verkligen så enkelt efter att bag efter omvandling kan

If ( värde över denna gräns)
Port_1 = 1

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

Re: Vägledning i kodning

Inlägg av Icecap »

Hur du använder AD-0mvandlaren står i databladet. Väljer du att använda den i 8-bit läget får du just 0-255 ut.

Och if-satser fungerar till detta men man kan göra det på andra sätt också.

Om man tänker att du begränsar 0-255 till 0-15 kan man enkelt göra en tabell som innehåller vilka som ska tändas och på det vis har ett litet och smidigt program.
Användarvisningsbild
dubbear
Inlägg: 328
Blev medlem: 7 april 2010, 23:59:24
Ort: Göteborg
Kontakt:

Re: Vägledning i kodning

Inlägg av dubbear »

Har du PICDEM2 board?
i så fall kan du köra Demoprogramet A2Demo
Det får du på köpet när du installerar C kompilatorn från HI-TECH Software
http://www.microchip.com/stellent/idcpl ... e=en542849


Med detta programmet körandes och databladet stadigt i hand kommer du ha slängt ihop lampan på rekordtid

edit:datorbladet
Användarvisningsbild
fireas
Inlägg: 204
Blev medlem: 26 januari 2009, 12:44:25

Re: Vägledning i kodning

Inlägg av fireas »

Har ett vanligt pickit2. Ska testa leka lite och återkomma, tack så mycket för hjälpen! Hoppas det är så lätt som ni säger:)
PopUnoNkoK
Inlägg: 789
Blev medlem: 10 december 2007, 12:40:08
Ort: Piteå

Re: Vägledning i kodning

Inlägg av PopUnoNkoK »

Hur har du tänkt detektera hur långt från lampan som handen är?
Jag frågar mest för att jag är nyfiken.

MVH Peter
Användarvisningsbild
fireas
Inlägg: 204
Blev medlem: 26 januari 2009, 12:44:25

Re: Vägledning i kodning

Inlägg av fireas »

Jag har ett par avstånds mätare runtom lampan som kommer att mäta avståndet. ju längre upp man kommer på lampan desto längre ifrån sensorn kommer man (hypotenusan).

Men har inte fått tag på så många sensorer så har bara två. får se hur jag löser det.
Användarvisningsbild
fireas
Inlägg: 204
Blev medlem: 26 januari 2009, 12:44:25

Re: Vägledning i kodning

Inlägg av fireas »

Har börjat kika på kodningen och har kommit fram till att helt enkelt A/D omvandla insignalen från avståndsmätarna till PICen och beroende på värde (delar in "levelsen" [0-255] i 4 nivåer ) så kommer olika antal lampor att lysa.

Men hur tycker ni att ajg ska utforma det?

Jag tänkte mig en evig while:

och i den 4 if/else satser där var och en kommer se ut på liknande sätt

if (första nivån)
bara en fjärdedel av lysidoderna tända
tre fjärdedelar stänger jag av aktivt då de kan varit lysta sen innan

if (andra nivån)
2 fjärdedelar lysta
2 fjärdedelar stänger jag av aktivt då de kan varit lysta sen innan

if (tredje nivån)
3 fjärdedelar
en fjärdedelar stänger jag av aktivt då de kan varit lysta sen innan

if (fjärde nivån)
Alla lysta


Vad tycker ni, arbetar PICen för mycket med denna whilesats ?
Användarvisningsbild
Icecap
Inlägg: 26652
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Vägledning i kodning

Inlägg av Icecap »

PIC'en jobbar lika mycket med eller utan den satsen, om inte du stoppar den kommer den att köra hela tiden ändå.
Användarvisningsbild
fireas
Inlägg: 204
Blev medlem: 26 januari 2009, 12:44:25

Re: Vägledning i kodning

Inlägg av fireas »

Jag vill att den ska köra hela tiden.

Är strömmen i så vill jag att den ska köra igång direkt. Men det är okej att bygga upp den så då tycker du?
Användarvisningsbild
Icecap
Inlägg: 26652
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Re: Vägledning i kodning

Inlägg av Icecap »

Om det fungerar är det OK, det är ju slutresultatet som är av vikt. Om det är "perfekt" eller inte är ju enbart definierat vid om önskat funktion är uppnådd eller inte.

Sedan kan man lösa uppgiften på många sätt och det ena sätt är lika bra som det andra sätt om de båda fungerar.
Användarvisningsbild
fireas
Inlägg: 204
Blev medlem: 26 januari 2009, 12:44:25

Re: Vägledning i kodning

Inlägg av fireas »

Jag har läst lite om A/D funktionen på PICen men jag verkar inte greppa hur man gör för att definiera spänningen i nivåer (0-255).

Jag får ju först definiera portarna som har avståndsmätare till A/D - portar, Som jag förstått det, med kommando "ANSEL" i mikroC.

Sedan vet jag inte hur jag ska få spänningen som kommer in till nivåer (0-255). Någon som har mer litteratur jag kan läsa så jag kan förstå eller förklara om ni orkar?

Sedan är det rätt straightforward, etta på de portar som ska lysa amed lysdioder.


Sedan har jag en annan fråga : Min PIC verkar inte ge 5V när jag programmerar den, så får mina LEDs lyser inte. SKa jag koppla en extern matningsspänning istället? Direkt på VDD/VSS?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: Vägledning i kodning

Inlägg av sodjan »

> Ska jag koppla en extern matningsspänning istället? Direkt på VDD/VSS?

Det här förstår jag inte alls. Processorn måste *alltid* ha matningsspänning.
Hur skulle den annars fungera !? Försöker du köra utan att ansluta matningen ??

> Sedan vet jag inte hur jag ska få spänningen som kommer in till nivåer (0-255).

AD omvandlaren är en 10 bitars omvandlare så du får 1024 nivåer. Hur dessa läses
av styrs av några bitar i ett kontrollregister till AD omvändlaren. D.v.s om de två
högsta bitarna eller de två lägsta ska hamna i ett eget register (ett register klarar
ju så klart bara 8 bitar). Man kan köra i 8-bit-mode genom att programmera så att
de *lägsta* 2 bitarna hamnar för sig och sedan strunta i dom, då får man ett
0-255 resultat över hela skalan, så att säga.

> Någon som har mer litteratur jag kan läsa så jag kan förstå...

Databladet i kapitlet ADC har allt du behöver veta. Det förrutsätter kanske att man
i alla fall vet vad en ADC är o.s.v. Läs kapitlet om ADC, om något är oklart så frågar
du *specifikt* på det oklara. Om du tror att du förstår, så kodar du. Om inte koden
fungerar så visar du koden så får vi se.

> ... eller förklara om ni orkar?

Förklara *vadå* ? Du måste peka på något specifikt. "I databladet säger det att
det-och-det, men på de säger också att det-och-det, hur hänger det ihop ?"
Eller något liknande...

> Jag får ju först definiera portarna som har avståndsmätare till A/D - portar,

Ja, med den lilla reservationen att det finns andra analoga funktioner än A/D (komparatorer).
Så det är bättre att bara tala om "definiera pinnar som analoga".

> ...får ju först definiera portarna ...

Notera att "portar" = 8 "pinnar", och det är *pinnarna* som man styr med ANSEL/ANSELH.

> ...Som jag förstått det, med kommando "ANSEL" i mikroC.

ANSEL (och ANSELH) är inga kommandon!
Det är kontrollregister (SFR, Special Function Registers) i processorn.
Du sätter dom i C ungefär som du sätter vilken variabel som helst.
Skriv svar