beste CO ik ben bezig met het vullen van twee 16 bit schuifregisters, maar ik heb daar nog een vraagje over.

ik wil een 32bits string (binair) opsplitsen in 4 groepen van 8 bit.
Hoe moet ik zon variabele splitsen? ik loop hier al uren op vast.
hier onder nog even een afbeelding voor het geval dat ik weer onduidelijk aan het uitleggen ben.

http://img845.imageshack.us/img845/5817/voorbeeldw.jpg

(Ps: even offtopic: Dit werkt overegens niet, terwijl dit het zelfde zou moeten doen als het bovenstaande)

SHOut datapin, clockpin, msbfirst, [%0000000100000000/16, %0000000000000001/16]
PulsOut latchpin, 1

declareer een array of een string en pak daar je elementen uit.

bv

Dim Data[4] as byte ;///<-- maak een array van 4 byte elementen

Data [0] = (je waarde) ;/// <--- zo zet je data in een array element dit geval element 1

je hebt nu een array van 4 elementen (bytes) deze bytes kun jij appart benaderen dus heb je data van 32 bite gesplits in 4 x 8 bytes

als je de variabele ook echt op bit niveau wilt benaderen dus bv 1 bitje hoog maken van een byte of juist de status ervan aflezen dan met je werken met SETBIT en GETBIT. Dit staat ook op www.picbasic.nl

[Bericht gewijzigd door gerben_1988 op (21%)]

ben ik ook instaat om die array weer in een array te stoppen? of is dat niet mogenlijk?

32 bit is een DWORD in picbasic. Met een word kun je dingen doen als


dim Ding as word
Dim halfding as ding.highbyte
dim anderehelft as ding.lowbyte

Ding = 515 ;(256*2+3), dus 0b 0000 0010 0000 0011

Print at 1,1, dec halfding
print at 2,1, dec anderehelft

Met als resultaat 2 op de bovenste regel en 3 op de onderste.
(of, als je bin zou printen, 10 en 11)

DWORD heeft een soortgelijk mechanisme om het op te splitsen. Zie de proton+ manual.

EDIT
Een array van array's, ik weet niet of dat kan. Een array van DWORDS kon dacht ik wel. Vreet wel geheugen...

[Bericht gewijzigd door Lucky Luke op (11%)]

Op 21 juni 2011 13:20:42 schreef flamingo:
ben ik ook instaat om die array weer in een array te stoppen? of is dat niet mogenlijk?

hoezo wil je dat? miss is het makkelijker als je even meer verteld wat de bedoeling is:)

oke,

Ik ben een ledcubes aan het maken(programere bouwen is al af) met twee cat4016 er in (16 bit led driver) waar ik vreemd genoeg 2 keer een byte in kan gooien maar niet in een keer 16bit.
daarvan gebruik ik steeds 25 bit per laag, dat is die "SHOut datapin, cloc...."
en er zijn 5 lagen die omstebeurten aan staan.
met die array's wou ik die 4byte's laden. en met de volgende de array de laag, en daarna weer een array(waar ik het nog niet over heb gehad) die dan weer de frame bepaald (het word een animatie).

[edit]

ik zal hier even posten wat ik tot nu toe heb. (ik heb al wat met arrays gespeeld maar dat heb ik even ongedaan gemaakt)

 Device = 16F688
Config INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, MCLRE_OFF                   ;
ALL_DIGITAL TRUE                    ;Alle ingangen digitaal 
Clear                               ;geheugen wissen  

    opstarten:


    Dim Laag As Word    
    Dim tijd As Word

    
    
    Symbol datapin = PORTA.1        ; schuifregister data
    Symbol clockpin = PORTA.0       ; schuifregister clock
    Symbol latchpin = PORTA.2       ; schuifregister latch
    

    ;        76543210
    TRISA = %00010000               ;PORTA.4 is een uitgang                
    TRISC = %00000000               ;Alle 8 poorten van PORTB zijn ingangen

    PORTA = %00000000               ;Alle niveaus van PORTA eerst laag maken                                     
    PORTC = %00000000               ;Alle niveaus van PORTC eerst laag maken
   
   
   init:

   Laag = %1
   tijd = 1

    Main:



      PORTC = Laag                  ;laag 0-4 
                

SHOut datapin, clockpin, msbfirst, [%00000001, %00000000, %00000000, %00000001]
PulsOut latchpin, 1



       If Laag = 10000 Then
       Laag = 1   
       ElseIf  Laag != 10000 Then
       Laag = Laag * 10
       EndIf
  DelayMS tijd     
       GoTo Main
       
       End
       

ps: voor het geheugen probleem zal ik waarschijnlijk moeten gaan toveren met formules.

oke kijk dat is alweer wat duidelijker,meetse chipjes werken met bytes die achter elkaar verstuurd worden maargoed een klein voorbeeldje..



Dim Data[4] as byte ;<--- een array met 4 byte elementen

;; om nou zoon byte element los een waarde te geven bv waarde 2 kun je dit doen:

Data[0] = 2 
Data[1] = 2

;;wil je nu een bepaald bitje uit zoon element 1 maken dan kun je dit doen.

Data#2.7 = 1  ;<-- dit maar bit 7 uit element 2 '1'


;zo verstuur je je data dan
SHOut datapin, clockpin, msbfirst, [Data[0],Data[1],Data[2],Data[3]]

ah, volgens mij begin ik het licht weer tezien.
ik ga hier even goed naar kijken!

Bedankt!

PS: was data trouwens niet een protected word?

Dim Data[4]

[Bericht gewijzigd door flamingo op (11%)]

Het commentaar bij je code is bedroevend.
PORTA.4 is een uitgang? Nee dus, PORTA.4 is een ingang, de rest zijn uitgangen
Alle 8 poorten van PORTB zijn ingangen? Nee dus, PORTC is in zijn geheel uitgang, en PORTB benoem je helemaal niet.
Ik weet het, het is maar commentaar, maar als je commentaar niet klopt...wat betekent dat dan voor de rest van je programma?


    ;        76543210
    TRISA = %00010000               ;PORTA.4 is een uitgang                
    TRISC = %00000000               ;Alle 8 poorten van PORTB zijn ingangen
 
    PORTA = %00000000               ;Alle niveaus van PORTA eerst laag maken                                     
    PORTC = %00000000               ;Alle niveaus van PORTC eerst laag maken

je hebt gelijk, ik zal het even aan passen
PORTB komt niet voor op mijn pic, dus lijkt het mij logisch om die niet te defineren.