Vägledning i kodning
Vägledning i kodning
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!
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!
Re: Vägledning i kodning
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.
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.
Re: Vägledning i kodning
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?
Är det verkligen så enkelt efter att bag efter omvandling kan
If ( värde över denna gräns)
Port_1 = 1
Osv?
Re: Vägledning i kodning
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.
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.
Re: Vägledning i kodning
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
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
Re: Vägledning i kodning
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:)
-
- Inlägg: 789
- Blev medlem: 10 december 2007, 12:40:08
- Ort: Piteå
Re: Vägledning i kodning
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
Jag frågar mest för att jag är nyfiken.
MVH Peter
Re: Vägledning i kodning
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.
Men har inte fått tag på så många sensorer så har bara två. får se hur jag löser det.
Re: Vägledning i kodning
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 ?
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 ?
Re: Vägledning i kodning
PIC'en jobbar lika mycket med eller utan den satsen, om inte du stoppar den kommer den att köra hela tiden ändå.
Re: Vägledning i kodning
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?
Ä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?
Re: Vägledning i kodning
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.
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.
Re: Vägledning i kodning
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?
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?
Re: Vägledning i kodning
> 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.
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.