1-wire styrd RGB-led

Berätta om dina pågående projekt.
Användarvisningsbild
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

Inlägg av PHermansson »

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ö...
Användarvisningsbild
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

Inlägg av JimmyAndersson »

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?
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: 1-wire styrd RGB-led

Inlägg av sodjan »

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...
Användarvisningsbild
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

Inlägg av JimmyAndersson »

På sätt och vis, fast om man.. eller.. :D


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. :)
Användarvisningsbild
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

Inlägg av PHermansson »

Om ingången på Picen är hög ska färgen stegas upp:

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
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:

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
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).
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: 1-wire styrd RGB-led

Inlägg av v-g »

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å ;)
Användarvisningsbild
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

Inlägg av PHermansson »

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.
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: 1-wire styrd RGB-led

Inlägg av v-g »

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 :vissla:

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.
Användarvisningsbild
colliman
Inlägg: 418
Blev medlem: 10 oktober 2007, 17:59:24
Ort: Tokholm
Kontakt:

Re: 1-wire styrd RGB-led

Inlägg av colliman »

Å 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
sodjan
EF Sponsor
Inlägg: 43247
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: 1-wire styrd RGB-led

Inlägg av sodjan »

> Å 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...
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Re: 1-wire styrd RGB-led

Inlägg av v-g »

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
Användarvisningsbild
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

Inlägg av PHermansson »

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 :(
Användarvisningsbild
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

Inlägg av PHermansson »

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:
Bild

Och ett kort på baksidan:
Bild

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:

Bild
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Re: 1-wire styrd RGB-led

Inlägg av vfr »

Tjusigt Patrik!
Användarvisningsbild
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

Inlägg av JimmyAndersson »

Jepp. Mycket snyggt! :)
Skriv svar