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.
(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, 1declareer 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%)]
Lucky Luke
Eluke.nl | handgetypt | I'm a poor, lonesome cowboy, with a long, long way to go.
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%)]
hadv
Just find out what you like and let it kill you
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.