Sida 1 av 2

1-wire styrd RGB-led

Postat: 29 mars 2010, 11:42:57
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ö...

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 12:52:21
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?

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 12:59:23
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...

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 13:06:53
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. :)

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 13:41:49
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).

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 14:07:22
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å ;)

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 14:12:53
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.

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 17:13:39
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.

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 18:28:22
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

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 19:04:41
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...

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 19:08:40
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

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 19:14:52
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 :(

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 20:20:26
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

Re: 1-wire styrd RGB-led

Postat: 29 mars 2010, 21:53:35
av vfr
Tjusigt Patrik!

Re: 1-wire styrd RGB-led

Postat: 30 mars 2010, 01:23:44
av JimmyAndersson
Jepp. Mycket snyggt! :)