1-wire styrd RGB-led
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
1-wire styrd RGB-led
En utveckling av lite tidigare experiment som nu kommit en bit på väg. Tanken är skapa en pryl som kan fås att lysa i olika färger på kommando från en dator via 1-wire. För att göra detta möjligt har jag byggt ett litet 'skatbo' bestående i huvudsak av en ytmonterad PIC12F510 och en ytmonterad DS2405.
DS2405 är kopplad på så vis att den styr en ingång på MCU:n till etta eller nolla. RGB-dioden är kopplad till tre av de andra benen på processorn.
1-wirenätet är kopplat till datorn med OWFS, och 1-wireenheterna är monterade under /mnt/owfs. Genom att skriva 0 respektive 1 till /mnt/owfs/05.FF4421000000/PIO fås utgången på DS2405 att växla. MCU:n känner av detta, och om växlingen går fort används en lookup-tabell för att hämta nya värden till PWM-rutinen, vilket leder till att RGB-dioden lyser i en annan färg. Om man istället väntar en sekund mellan skrivningarna till 1-wireenheten nollställs färgräknaren i PIC:en och sekvensen börjar om, detta gör det möjligt att från datorn ange en bestämd färg (nolla räknaren och räkna upp ett bestämt antal steg).
Som demonstration kör datorn nu ett program som först skriver en nolla till 1-wirekretsen, väntar en sekund och sedan skriver en etta. Därefter körs en loop åtta gånger som skriver en nolla direkt följd av en etta. En liten video som visar hur det ser ut:
Kommer snart lite mer film när kretsen placerats i sin rätta miljö...
DS2405 är kopplad på så vis att den styr en ingång på MCU:n till etta eller nolla. RGB-dioden är kopplad till tre av de andra benen på processorn.
1-wirenätet är kopplat till datorn med OWFS, och 1-wireenheterna är monterade under /mnt/owfs. Genom att skriva 0 respektive 1 till /mnt/owfs/05.FF4421000000/PIO fås utgången på DS2405 att växla. MCU:n känner av detta, och om växlingen går fort används en lookup-tabell för att hämta nya värden till PWM-rutinen, vilket leder till att RGB-dioden lyser i en annan färg. Om man istället väntar en sekund mellan skrivningarna till 1-wireenheten nollställs färgräknaren i PIC:en och sekvensen börjar om, detta gör det möjligt att från datorn ange en bestämd färg (nolla räknaren och räkna upp ett bestämt antal steg).
Som demonstration kör datorn nu ett program som först skriver en nolla till 1-wirekretsen, väntar en sekund och sedan skriver en etta. Därefter körs en loop åtta gånger som skriver en nolla direkt följd av en etta. En liten video som visar hur det ser ut:
Kommer snart lite mer film när kretsen placerats i sin rätta miljö...
- JimmyAndersson
- Inlägg: 26571
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Re: 1-wire styrd RGB-led
Intressant och väldigt användbart! 
Jag hänger inte riktigt med på ettorna och nollorna.
Byter den färg varje gång en 1a kommer i loopen?
Eller räknar den antalet ettor och t.ex 5st ettor betyder blå och 8st ettor betyder grön?

Jag hänger inte riktigt med på ettorna och nollorna.
Byter den färg varje gång en 1a kommer i loopen?
Eller räknar den antalet ettor och t.ex 5st ettor betyder blå och 8st ettor betyder grön?
Re: 1-wire styrd RGB-led
Som jag förstår det så :
> Byter den färg varje gång en 1a kommer i loopen?
Verkar vara "ja".
> Eller räknar den antalet ettor och t.ex 5st ettor betyder blå och 8st ettor betyder grön?
Verkar också vara "ja". Det motsäger ju inte ovanstående...
> Byter den färg varje gång en 1a kommer i loopen?
Verkar vara "ja".
> Eller räknar den antalet ettor och t.ex 5st ettor betyder blå och 8st ettor betyder grön?
Verkar också vara "ja". Det motsäger ju inte ovanstående...
- JimmyAndersson
- Inlägg: 26571
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt:
Re: 1-wire styrd RGB-led
På sätt och vis, fast om man.. eller.. 
Låt säga att tabellen ser ut såhär:
1 Röd
2 Grön
3 Blå
4 Cyan
Byter den färg varje gång en 1a kommer i loopen så stegar den igenom listan.
Först lyser LED'en röd, sedan grön, blå, cyan.
Det sista jag skrev förrut skulle däremot göra det möjligt att växla färg i vilken ordning som helst.
T.ex röd, blå, röd, grön, röd, cyan.
Men jag förstår hur du menade.

Låt säga att tabellen ser ut såhär:
1 Röd
2 Grön
3 Blå
4 Cyan
Byter den färg varje gång en 1a kommer i loopen så stegar den igenom listan.
Först lyser LED'en röd, sedan grön, blå, cyan.
Det sista jag skrev förrut skulle däremot göra det möjligt att växla färg i vilken ordning som helst.
T.ex röd, blå, röd, grön, röd, cyan.
Men jag förstår hur du menade.

- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Re: 1-wire styrd RGB-led
Om ingången på Picen är hög ska färgen stegas upp:
Utgången på DS2405 är open collector och kopplad via ett motstånd till +5 volt, alltså sätts utgången hög genom att man skriver "0" till den:
echo "0" > /mnt/owfs/05.FF4421000000/PIO
När detta detekteras av processorn ("BTFSC INPUT") så hoppar koden till rutinen input:
För att sätta en bestämd färg får man alltså nolla räknaren genom att skriva 0, vänta och sedan skriva 1:
echo "0" > /mnt/owfs/05.FF4421000000/PIO
sleep 1
echo "1" > /mnt/owfs/05.FF4421000000/PIO
Därefter får man klocka upp färgen det antal gånger som behövs för att komma till rätt färg i tabellen:
echo "0" > /mnt/owfs/05.FF4421000000/PIO
echo "1" > /mnt/owfs/05.FF4421000000/PIO
--> Färg 1
echo "0" > /mnt/owfs/05.FF4421000000/PIO
echo "1" > /mnt/owfs/05.FF4421000000/PIO
--> Färg 2
...osv...
Koden är genom detta tidsberoende och jag är inte säker på att det fungerar på andra datorer. Undrar om Bash sleep-kommando verkligen ger 1 sekunds fördröjning på alla datorer?
Men detta är det smartaste jag kommit på för att kunna sätta en bestämd färg med den konstruktion som används, mellan Pic:en och 1-wirekretsen är det ju i princip entråds seriekommunikation. Det skulle gå att göra bättre, men då blir det knepigt med programmeringen på PC-sidan (man har ingen kontroll på hur lång pulsen från en "echo '0';echo '1'"-sekvens är).
Kod: Markera allt
loop
CALL pwm_multiple ; Handle the software PWM that sets the led color
;Check input
BTFSC INPUT ;Input low?
goto inp_high ;Yes, goto subroutine
goto loop ;No, do loop
echo "0" > /mnt/owfs/05.FF4421000000/PIO
När detta detekteras av processorn ("BTFSC INPUT") så hoppar koden till rutinen input:
Kod: Markera allt
; If input is high we get here, and we shall increase the counter
; that sets the color.
banksel cnt
incf cnt, f ;Add to counter three times
incf cnt, f
incf cnt, f
movf cnt, w
;Shut of leds while updating color
bcf REDLED
bcf BLUELED
bcf GREENLED
;Wait for the host to work
call Delay
call Delay
;Is the input still low? If so, reset color.
;If the input is held low for a longer time the counter shall be reset
BTFSS INPUT ;Input high?
goto color_fetch ;Yes, go back to loop
;Input still low, reset the counter
banksel cnt
MOVLW d'1'
MOVWF cnt
call Delay
goto color_fetch
echo "0" > /mnt/owfs/05.FF4421000000/PIO
sleep 1
echo "1" > /mnt/owfs/05.FF4421000000/PIO
Därefter får man klocka upp färgen det antal gånger som behövs för att komma till rätt färg i tabellen:
echo "0" > /mnt/owfs/05.FF4421000000/PIO
echo "1" > /mnt/owfs/05.FF4421000000/PIO
--> Färg 1
echo "0" > /mnt/owfs/05.FF4421000000/PIO
echo "1" > /mnt/owfs/05.FF4421000000/PIO
--> Färg 2
...osv...
Koden är genom detta tidsberoende och jag är inte säker på att det fungerar på andra datorer. Undrar om Bash sleep-kommando verkligen ger 1 sekunds fördröjning på alla datorer?
Men detta är det smartaste jag kommit på för att kunna sätta en bestämd färg med den konstruktion som används, mellan Pic:en och 1-wirekretsen är det ju i princip entråds seriekommunikation. Det skulle gå att göra bättre, men då blir det knepigt med programmeringen på PC-sidan (man har ingen kontroll på hur lång pulsen från en "echo '0';echo '1'"-sekvens är).
Re: 1-wire styrd RGB-led
Varför inte göra PIC:en till en 1-wireslav så kan du skicka värdet på R G & B direkt till den? Jag gör nåt liknande fast för hela trappen men över RS485.
Ruskigt smidigt fungerar det också
Ruskigt smidigt fungerar det också

- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Re: 1-wire styrd RGB-led
För att det skulle ta allt för mycket tid att ta fram den koden. Dessutom bryter det mot licensreglerna, om man nu bryr sig om sånt. Jag har letar efter kod på nätet, men det finns inte många projekt och inte mycket kod. Det närmaste är ett projekt som använder en 16F628 och en SHT11, men där vägrar tydligen upphovsmannen att lämna ut någon kod.
Så detta kan ses som en fulösning, det blir lite mer och dyrare hårdvara men samtidigt slipper man en massa timmars kodande.
Och tanken här är just 1-wirekompabilitet. Annars finns det ju smidiga lösningar som tex ShiftBrite.
Så detta kan ses som en fulösning, det blir lite mer och dyrare hårdvara men samtidigt slipper man en massa timmars kodande.
Och tanken här är just 1-wirekompabilitet. Annars finns det ju smidiga lösningar som tex ShiftBrite.
Re: 1-wire styrd RGB-led
Finns ju ex.vis en här på forat som byggt en 1-wireslav
Dock på en 18F2221. Fast det är klart helt snabbt gick det ju inte
Visst finns det lösningar för alla plånböcker men dels är de ofta begränsade med räckvidd eller hastighet. RS485 tycker jag kvalar in på båda kategorierna kretsen kostar ju dessutom bara 10,80 på ELFA
1-wire är bra men rejält mycket krångligare eftersom man inte kan köra den inbyggda USART:en.


Visst finns det lösningar för alla plånböcker men dels är de ofta begränsade med räckvidd eller hastighet. RS485 tycker jag kvalar in på båda kategorierna kretsen kostar ju dessutom bara 10,80 på ELFA

Re: 1-wire styrd RGB-led
Å jag som är utanför datatugget undrar vad 1 wire betyder?
På bilden ser det ut som 4 sladdar går till styrningen av led'en.
Å då har jag en sådan styrning, där rgb led sitter i en lång rad, och kan styras individuellt.
Kolla min sida http://www.rgbled.se eller i forumet http://elektronikforumet.com/forum/view ... it=rgb+led
Men då är dom färdigbyggda förståss.
C-man
På bilden ser det ut som 4 sladdar går till styrningen av led'en.
Å då har jag en sådan styrning, där rgb led sitter i en lång rad, och kan styras individuellt.
Kolla min sida http://www.rgbled.se eller i forumet http://elektronikforumet.com/forum/view ... it=rgb+led
Men då är dom färdigbyggda förståss.
C-man
Re: 1-wire styrd RGB-led
> Å jag som är utanför datatugget undrar vad 1 wire betyder?
http://www.maxim-ic.com/products/1-wire/
http://www.maxim-ic.com/products/1-wire ... /index.cfm
T.ex...
http://www.maxim-ic.com/products/1-wire/
http://www.maxim-ic.com/products/1-wire ... /index.cfm
T.ex...
Re: 1-wire styrd RGB-led
1 wire är ett protokoll som används av bla DS1820 (tempsensor) som tillåter att man med enbart 2 kablar skickar data (därav 1-wire). Dock brukar de flesta (däribland jag) köra med 3kablar då man annars måste sk. parasitmata kretsarna på slingan vilket är lite halvdrygt och man tappar bla i de högre tempområdena med ds1820.
Protokollet fungerar tidsorienterat och man skickar en "startpuls" och därefter antigen sätter man signalen direkt hög eller låg beroende på om man vill skicka en ETT/NOLL-BIT.
1-wire tål mycket långa kabellängder och är allmänt känt som robust.
Se även: http://en.wikipedia.org/wiki/1-Wire
Protokollet fungerar tidsorienterat och man skickar en "startpuls" och därefter antigen sätter man signalen direkt hög eller låg beroende på om man vill skicka en ETT/NOLL-BIT.
1-wire tål mycket långa kabellängder och är allmänt känt som robust.
Se även: http://en.wikipedia.org/wiki/1-Wire
- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Re: 1-wire styrd RGB-led
Sen blir det okså smidigt med OWFS som jag kör med här. Skriv ett eller till en 'virtuell fil' så ändrar elektroniken nivå på en pinne.
Projektet är nu i princip klart och lysdioden har placerats på det ställe den ska vara. Rätt läckert! Tyvärr bestämde sig kamerabatteriet för att ta slut i samma veva
Projektet är nu i princip klart och lysdioden har placerats på det ställe den ska vara. Rätt läckert! Tyvärr bestämde sig kamerabatteriet för att ta slut i samma veva

- PHermansson
- EF Sponsor
- Inlägg: 4340
- Blev medlem: 22 december 2004, 00:46:38
- Ort: Särestad Grästorp
- Kontakt:
Re: 1-wire styrd RGB-led
Nu har lysdioden hamnat i sin rätta miljö, som är en ureldad ljuslykta. Denna har fyllts med något som ska likna isbitar i plast, blev rätt snyggt:
Från ovan:
Och ett kort på baksidan:
Så en video som visar samma mjukvara som ovan, de olika färgerna gås igenom. Och nej, den svarta kontakten ska inte vara där, det är anslutningen till programmeraren som kommer att klippas bort när jag är helt säker på att jag är nöjd med programmet. Skakigt värre och med fokus på nått annat, men ändå
Lite mörkare i rummet nu:

Från ovan:

Och ett kort på baksidan:

Så en video som visar samma mjukvara som ovan, de olika färgerna gås igenom. Och nej, den svarta kontakten ska inte vara där, det är anslutningen till programmeraren som kommer att klippas bort när jag är helt säker på att jag är nöjd med programmet. Skakigt värre och med fokus på nått annat, men ändå

Lite mörkare i rummet nu:

- JimmyAndersson
- Inlägg: 26571
- Blev medlem: 6 augusti 2005, 21:23:33
- Ort: Oskarshamn (En bit utanför)
- Kontakt: