Ledsnurra av Jeda007

Berätta om dina pågående projekt.
jeda007
Inlägg: 250
Blev medlem: 27 september 2003, 14:55:18
Ort: Marks komun
Kontakt:

Ledsnurra av Jeda007

Inlägg av jeda007 »

Hej!

Nu har jag börjat få till en egen ledsnurra!
Blev lite besviken först men resultatet blev mycket bättre när jag tittade lite på avstånd, satt med andra ord för nära!

Jag använder en PIC16F877A samt 30 st 5mm lysdioder.
Jag programerar i PICBasic.

Men jag körde fast lite när jag nu vill få till en snyggare programering!
Idag gör jag som så att jag tänder eller släcker alla lysdioder på en rad, pausar lite, släcker alla paus igen osv! tills jag fått ut min bokstav eller mönster!

Min tanke var att istället använda mig av en array, skapade en bit array med 30 segment, men det som var så klart i huvudet förut är inte det längre, jag tänkte mig att jag skulle kunna använda arrayen som ett 30 bitars ord med en lysdiod för varje bit, tänkte jag helt fel?

Hur kan man ge alla arrayelement värde 1? utan att skriva till varje element?

Jag kanske är helt ute och cyklar man kanske kan använda Ascii kod för varje bokstav eller kanske två 16 bitars ord där varje diod är en bit?

Kan man använda tex en bmp bild med 30pixlar gånger vad delningen är på ett varv, hur tusan skall man isåfall läsa ut bmp bilden?

Som ni förstår har jag kört fast riktigt ordentligt nu!
mycket tacksam för en liten puff i rätt riktning :)

Mvh jeda007
Senast redigerad av jeda007 16 februari 2006, 21:12:00, redigerad totalt 1 gång.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Här kommer min kod för min gamla (och kassa) ledsnurra, skriven för en 877:a i PicBasic. Varning för att koden säkert är skitkass, då jag vid denna tid faktiskt var sämre än vad jag är nu.
Bilden (12x20) läggs in (lite snett) i "tabellen" i början av koden. Sedan kollar den när en läsgaffel bryts och börjar då rita upp bilden. Detta kanske allafall kan ge dig någon ide om hur koden kan se ut. Då detta faktiskt funkade riktigt bra för mig :)

Kod: Markera allt

DEFINE OSC 20

p_01 var PORTD.4
p_02 var PORTD.5
p_03 var PORTD.6
p_04 var PORTD.7
p_05 var PORTB.0
p_06 var PORTB.1
p_07 var PORTB.2
p_08 var PORTB.3
p_09 var PORTB.4
p_10 var PORTB.5
p_11 var PORTB.6
p_12 var PORTB.7

RW  var bit[12]
x   var word
POS var word

DATA 1

DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1
DATA 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1
DATA 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1
DATA 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1
DATA 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1
DATA 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1
DATA 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1
DATA 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
DATA 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0
DATA 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
DATA 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
DATA 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0
DATA 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0
DATA 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1
DATA 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1
DATA 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1
DATA 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1
DATA 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1
DATA 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1
DATA 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1

TRISB = 0
TRISA = 1
TRISD = 0
ADCON1= %00000111

PORTB = 0
PORTD = 0

LOOP:

if PORTA.0 = 0 then

    For POS = 0 TO 228 step 12

        for x = 1 to 12
            READ POS+x,RW[x]
        next x

        p_01=RW[1]: p_02=RW[2]: p_03=RW[3]: p_04=RW[4] : p_05=RW[5] : p_06=RW[6]
        p_07=RW[7]: p_08=RW[8]: p_09=RW[9]: p_10=RW[10]: p_11=RW[11]: p_12=RW[12]  

        PAUSEUS 1000

    NEXT POS
    
    PORTB = %00000000
    PORTD = %00000000
    
endif

goto LOOP
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg av mullemeck »

På min ledsnurra sparade jag mina bilder i ett minne i råformat, så att en bit i minnet stod för en pixel, det gör det enkelt att läsa av. Då kan man göra bmp-avkodningen i datorn innan man skickar över den till snurran.
jeda007
Inlägg: 250
Blev medlem: 27 september 2003, 14:55:18
Ort: Marks komun
Kontakt:

Inlägg av jeda007 »

Hej!
jack

Tycker det såg rätt stiligt ut med Data upplägget vad jag förstår så blir bilden som den syns med ettorna och nollorna?
Har alldrig använt datakomandot såg inte riktigt hur kopplingen fungerade mellan arrayen och data, men jag får väl labba lite ikväll och se om jag kommer på det!

mullemeck
vad använde du för program för att göra en råformatbild?
finns det något sätt att se hur bilden blir i kodformat?

För att göra bokstäver så kan man väl göra var för sig och sedan hoppa dit?
Kan man inte göra en timmer i en pic typ som i en PLC?

Mvh Jens
jeda007
Inlägg: 250
Blev medlem: 27 september 2003, 14:55:18
Ort: Marks komun
Kontakt:

Inlägg av jeda007 »

Hej! :cry: :cry:

Jag hade inte testat alla 30 dioder, redan där uppstod problem!
Några felkopplingar en liten kortis samt jag kan inte få porta.4 att tända, den blinkar bara till med ca 0,13v och det räker inte så långt!
Alla andra fungerar hoppar jag över porta.4 så fungerar alla!

Här ar programmet jag gjorde för att se att alla dioder fungerade samt var kopplade i rätt ordning!
DEFINE OSC 20
ADCON1 = 7

TRISB = %00000000
TRISD = %00000000
TRISC = %00000000
TRISE = %00000000
TRISA = %00000001

' TID SOM DIODERNA ÄR TÄNDA
tid VAR BYTE
tid=1000

loop:
LOW portB.7
LOW portB.6
LOW portB.5
LOW portB.4
LOW portB.3
LOW portB.2
LOW portB.1
LOW portB.0
LOW portD.7
LOW portD.6
LOW portD.5
LOW portD.4
LOW portC.7
LOW portC.6
LOW portC.5
LOW portC.4
LOW portD.3
LOW portD.2
LOW portD.1
LOW portD.0
LOW portC.3
LOW portC.2
LOW portC.1
LOW portC.0
LOW portE.2
LOW portE.1
LOW portE.0
LOW portA.5
HIGH portA.4
LOW portA.3
LOW portA.2

if portA.0=0 then goto loop


high portB.7
PAUSE TID
high portB.6
PAUSE TID
high portB.5
PAUSE TID
high portB.4
PAUSE TID
high portB.3
PAUSE TID
high portB.2
PAUSE TID
high portB.1
PAUSE TID
high portB.0
PAUSE TID
High portD.7
PAUSE TID
high portD.6
PAUSE TID
high portD.5
PAUSE TID
high portD.4
PAUSE TID
high portC.7
PAUSE TID
high portC.6
PAUSE TID
high portC.5
PAUSE TID
high portC.4
PAUSE TID
high portD.3
PAUSE TID
High portD.2
PAUSE TID
high portD.1
PAUSE TID
High portD.0
PAUSE TID
high portC.3
PAUSE TID
high portC.2
PAUSE TID
high portC.1
PAUSE TID
high portC.0
PAUSE TID
high portE.2
PAUSE TID
high portE.1
PAUSE TID
high portE.0
PAUSE TID
high portA.5
PAUSE TID
high portA.4
PAUSE TID
high portA.3
PAUSE TID
high portA.2
PAUSE TID

GOTO loop ' Go back to loop and blink LED forever
End

Inte den snyggaste programsnutt jag sett men den fungerar förutom Porta.4!

Jack !
hur många sådana där data rader får man plats i minnet ungefär i ditt exempel så blir det ju ca en bokstav samt så har jag tretio dioder blir det problem att skriva långa namn tro?

Mvh jeda007
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Jag fick bara plats med det som stod i koden :) Har jag för mig.

Så ett extern EEPROM kanske är att fundera på. Eller någon form av realtidsöverföring, typ IR.
mullemeck
Inlägg: 1306
Blev medlem: 27 maj 2003, 23:52:06
Ort: Lund
Kontakt:

Inlägg av mullemeck »

Av enkelhetens skull så använde jag inte bmp-bilder utan bilderna görs i notepad eller dylikt så att bilden ritas upp med ettor och nollor, en etta betyder tänd lampa och nolla släckt.

sen gjorde jag ett litet c++ program som läser av txt-filerna och skickar ut bilderna som 150byte.
Användarvisningsbild
jack
EF Sponsor
Inlägg: 2059
Blev medlem: 5 oktober 2004, 17:32:27

Inlägg av jack »

Själv gjorde jag ett mycket enkelt Visual Basic-program där man kunde rita upp en bild. Denna överfördes sen till samma form som i koden.

Om intresse finns lägger jag ut det.
Användarvisningsbild
Jeppsson
EF Sponsor
Inlägg: 810
Blev medlem: 3 oktober 2005, 18:00:43
Ort: Karlskrona

Inlägg av Jeppsson »

mullemeck > sen gjorde jag ett litet c++ program som läser av txt-filerna och skickar ut bilderna som 150byte

Menar du att du skickar bildinformationen från programmet via seriellporten/liknande till Ledsnurran?l

I så fall låter som ett program som kan vara bra till framtida projekt. Om det är möjligt så skulle jag gärna ta en titt på ditt program.

/

Jeppsson
Användarvisningsbild
Icecap
Inlägg: 26153
Blev medlem: 10 januari 2005, 14:52:15
Ort: Aabenraa, Danmark

Inlägg av Icecap »

PORTA.4 är ju på en del modeller open-drain....det kan ju förklarar problemet med den pinne.
jeda007
Inlägg: 250
Blev medlem: 27 september 2003, 14:55:18
Ort: Marks komun
Kontakt:

Inlägg av jeda007 »

Hej!
Här kommer min nya snutt! :P
Känner mig riktigt nöjd skall utöka till två ord på höjden (32Dioder) kanske även bredda bokstavsfältet.
Har gjort en(mall) i Excell som är rutat sätter jag ett kryss får jag ut den binära koden rad för rad, något liknande era förslag kanske!

**********************************************************
DEFINE OSC 20
ADCON1 = 7

TRISB = %00000000
TRISD = %00000000
TRISC = %00000000
TRISE = %00000000
TRISA = %00000001


' TID SOM DIODERNA ÄR TÄNDA
tid VAR BYTE
tid=1000

led var word[10]
LED_N VAR WORD
X VAR BYTE



LOOP:
PORTB=0
PORTD=0
PORTC=0
PORTE=0
PORTA=0
if portA.0=0 then goto loop

gosub a
FOR X = 0 TO 9
LED_N = LED[X]
portB.7 = led_N.0 : portB.6 = led_N.1 : portB.5 = led_N.2
portB.4 = led_N.3 : portB.3 = led_N.4 : portB.2 = led_N.5
portB.1 = led_N.6 : portB.0 = led_N.7 : portD.7 = led_N.8
portD.6 = led_N.9 : portD.5 = led_N.10 : portD.4 = led_N.11
portC.7 = led_N.12 : portC.6 = led_N.13 : portC.5 = led_N.14
portC.4 = led_N.15


PAUSEUS 1000
nEXT X

GOTO LOOP


A:
led[0] = 3
led[1] = 12
led[2] = 48
led[3] = 208
led[4] = 784
led[5] = 784
led[6] = 208
led[7] = 48
led[8] = 12
led[9] = 3

return

**************************************************
Det där med open drain försod jag inte riktigt hur fungerar det? är det omvänt på något vis?

Låter intressant med visual basic men jag tycker det är bökig att få till det!
har försökt några gånger.

Mvh jeda007
jeda007
Inlägg: 250
Blev medlem: 27 september 2003, 14:55:18
Ort: Marks komun
Kontakt:

Inlägg av jeda007 »

Hej!
Japp pinne 4 var en open drain samt så var någon med namn shmitt involverad men jag förstog inte så mycket!
Hur tusan kopplar jag detta så det fungerar?
Mvh jeda007
jeda007
Inlägg: 250
Blev medlem: 27 september 2003, 14:55:18
Ort: Marks komun
Kontakt:

Inlägg av jeda007 »

Hej!
Är det någon som kan förklara hur open drain fungerar?
Går den att använda som vanlig ingång, men inte utgång?

Mvh Jeda007
jeda007
Inlägg: 250
Blev medlem: 27 september 2003, 14:55:18
Ort: Marks komun
Kontakt:

Inlägg av jeda007 »

Hej!
Sitter och pillar med min ledsnurra igen!
Den fungerar fint med text som står still använder en läsgaffel som trigg varje varv.
Men nu vill jag låta en text med 5 bostäver flyta runt hela tiden,problemet somjag ser det är triggpunkten, det kommer bli en konstig skarv där eller så skrivs texten bara vart annat varv för att man missat triggen mitt i texten.
Det bästa jag fick till var att hoppa över triggen men det blev lite svårt att ställa in!
Mina ideer har sinat behöver hjälp!
monstrum
Inlägg: 619
Blev medlem: 13 januari 2005, 05:38:32
Ort: Göteborg

Inlägg av monstrum »

jeda007 skrev:Hej!
Är det någon som kan förklara hur open drain fungerar?
Går den att använda som vanlig ingång, men inte utgång?

Mvh Jeda007
Absolut. Korta versionen:
Open-drain innebär att utgångssteget är kopplat med endast en transistor. Denna kan antingen vara stängd, eller öppen (naturligtvis). Om transistorn är stängd, dvs inte leder, får du ingen signal alls på utgången. Varken matningsspänning eller jord. Om transistorn är öppen så leder den mot jord och du får jord på utgången.

Så, om du kopplar en lysdiod från pinnen till jord, så kommer ingenting alls att hända eftersom du inte kan få något annat än jord på utgången. Vänder du däremot på dioden så kommer det att fungera.
Skriv svar