tokkoo
direct duidelijk eenvoudig
Dim Tel as word.
main:
While 1 = 1
Tel = 12345 ;word groote
digi1 = Dig Tel , 0 ; 1e getal opslaan
digi2 = Dig Tel , 1 ; 2e getal opslaan
digi3 = Dig Tel , 2 ; 3e getal opslaan
digi4 = Dig Tel , 3 ; 4e getal opslaan
digi5 = Dig Tel , 4 ; 5e getal opslaan
If digi1 = 0 Then
PORTB.4 = 0 ; A
PORTB.5 = 0 ; B
PORTB.6 = 0 ; C
PORTB.7 = 0 ; D
EndIf
If digi1 = 1 Then
PORTB.4 = 1 ; A
PORTB.5 = 0 ; B
PORTB.6 = 0 ; C
PORTB.7 = 0 ; D
EndIf
If digi1 = 2 Then
PORTB.4 = 0 ; A
PORTB.5 = 1 ; B
PORTB.6 = 0 ; C
PORTB.7 = 0 ; D
EndIf
If digi1 = 3 Then
PORTB.4 = 1 ; A
PORTB.5 = 1 ; B
PORTB.6 = 0 ; C
PORTB.7 = 0 ; D
EndIf
If digi1 = 4 Then
PORTB.4 = 0 ; A
PORTB.5 = 0 ; B
PORTB.6 = 1 ; C
PORTB.7 = 0 ; D
EndIf
If digi1 = 5 Then
PORTB.4 = 1 ; A
PORTB.5 = 0 ; B
PORTB.6 = 1 ; C
PORTB.7 = 0 ; D
EndIf
If digi1 = 6 Then
PORTB.4 = 0 ; A
PORTB.5 = 1 ; B
PORTB.6 = 1 ; C
PORTB.7 = 0 ; D
EndIf
If digi1 = 7 Then
PORTB.4 = 1 ; A
PORTB.5 = 1 ; B
PORTB.6 = 1 ; C
PORTB.7 = 0 ; D
EndIf
If digi1 = 8 Then
PORTB.4 = 0 ; A
PORTB.5 = 0 ; B
PORTB.6 = 0 ; C
PORTB.7 = 1 ; D
EndIf
If digi1 = 9 Then
PORTB.4 = 1 ; A
PORTB.5 = 0 ; B
PORTB.6 = 0 ; C
PORTB.7 = 1 ; D
EndIf
Wend
GoTo main
Ik ben al een poosje bezig om dig te ontdekken, maar hij doet nog niet wat ik graag wil.
Ik wil het getal :12345 op digi1 laten zien.
Op de een of andere manier krijg ik het getal niet door de dig omzetter heen.
Er gaan geen leds branden, mijn pic loopt wel.
Soms moet je eerst weer terug naar de basis, nu dus.
Iemand een idee waar dit mis gaat?
Stynus
Met vriendelijke groet, Stynus ||| http://www.elektronicastynus.be
tokkoo
direct duidelijk eenvoudig
Staan als uitgang ingesteld.
Ik wou eerst een word serieel ontvangen en daarna deze met dig omzetten om zo 7 segment aan te sturen dmv bcd in een 4511.
Aangezien dit niet lukte terug naar simpel begin.
noone
483726095 / Een foto zegt meer dan 1000 woorden.
ik ken geen pic basic,
maar doen de uitgangen het wel als je gewoon,
digi1 = 1 ;
op regel 13 zet?
en wat doen PORTB.0 t/m PORTB.3 ?
mvg,
noone.
[Bericht gewijzigd door noone op (11%)]
plantrekker
True story bro!
Ik werk niet met basic (dus kan niet antwoorden op je vraag) maar dat hele if-gedoe... Vervang dat door 1 regel:
PORTB = digi1 << 4;
Eventueel nog gebruik maken van een mask als je de andere poortpinnen (0,1,2,3 van PORTB) nog gebruikt voor wat anders want nu zullen die steeds als 0 overschreven worden.
noone
483726095 / Een foto zegt meer dan 1000 woorden.
Jeroen Boere
IF you can't convince them, then confuse them!
zoek ens in je datasheet naar "read-modify-write"
je moet in een keer een word naar de tris toe schieten, enkel een bit na bit aanpassen werkt niet.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
tokkoo
direct duidelijk eenvoudig
Tris was dus wel 1 van de problemen.
Door het vaak veranderen erin geslopen.
Ik kan nu het getal in Tel wel presenteren, prima dus.
Dank U.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
tokkoo
direct duidelijk eenvoudig
Als volgt:
Tel = 12345 ;word groote
digi1 = Dig Tel , 0 ; 1e getal opslaan
digi2 = Dig Tel , 1 ; 2e getal opslaan
digi3 = Dig Tel , 2 ; 3e getal opslaan
digi4 = Dig Tel , 3 ; 4e getal opslaan
digi5 = Dig Tel , 4 ; 5e getal opslaan
If digi1 = 5 Then
PORTB.4 = 1 ; A
PORTB.5 = 0 ; B
PORTB.6 = 1 ; C
PORTB.7 = 0 ; D
EndIf
De bovenste regel: digi1 = Dig Tel , 0 haalt nu digit nummer 0(volgens compiler is rechtse 0) uit Tel en dus 5, want dat is de meest rechtse digit.
Daarna ga ik als digi1 = 5 dan de poorten aansturen.
noone
483726095 / Een foto zegt meer dan 1000 woorden.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
Als het van rechts telt, is digi1 inderdaad 5, maar ik zie niet hoe je '12345' op de poort kunt krijgen met die code...
noone
483726095 / Een foto zegt meer dan 1000 woorden.
Arco
Special Member
Arco - "Simplicity is a prerequisite for reliability" - hard-, firm-, en software ontwikkeling: www.arcovox.com
noone
483726095 / Een foto zegt meer dan 1000 woorden.
Ah, bedoel je dat,
de code in de startpost verwerkt alleen digi1,
het hele programma wordt voor alle cijfers erg groot,
kan veel korter, denk ik.
mvg,
noone.
tokkoo
direct duidelijk eenvoudig
noone
483726095 / Een foto zegt meer dan 1000 woorden.
OK, maar wat doe je met PORTB.0 t/m PORTB.3?
dit is geen strikvraag, 'niks' is ook goed,
je kunt je dig naar PORTB.4 t/m PORTB.7 omzetter veel kleiner maken,
door een rekenkundige bewerking.
mvg,
noone.
plantrekker
True story bro!
Het is zelfs niet met een rekenkundige bewerking...
digi1 heeft al de exacte binaire waarde die hij op een poort naar buiten wil brengen...
Alleen omdat hij die binaire waarde op de most significant nibble van de poort wil, moet hij 4 keer shiften. Zo dus:
PORTB = digi1 << 4;Op die manier wordt de laagste nibble wel altijd met 0 overschreven. Wil je dat niet, dan doe je het zo:
PORTB = (PORTB & 0x0F) | (digi1 << 4);(ik weet dat ik c-code schreef)
noone
483726095 / Een foto zegt meer dan 1000 woorden.
tokkoo
direct duidelijk eenvoudig
Op 20 juli 2010 13:27:53 schreef noone:
OK, maar wat doe je met PORTB.0 t/m PORTB.3?dit is geen strikvraag, 'niks' is ook goed,
je kunt je dig naar PORTB.4 t/m PORTB.7 omzetter veel kleiner maken,
door een rekenkundige bewerking.mvg,
noone.
Met B.0 t/m B.3 word een andere bcd voor een ander display aangestuurd.
Ik kan dus niet beide in bv : portb = %00001111 doen, want dan beïnvloed ik ook het andere display die iets heel anders moet aangeven.
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Doe je het voor het andere display (die op portb.0 tm 3 zit) hetzelfde als hier? dus elke bit van portb apart aansturen?
Dan kan je ook beide displays in 1 keer aansturen, "Waarde" is even de waarde van het display wat aan portb.0 tm 3 zit:
DIM Tel AS WORD
DIM Digi[5] AS BYTE
DIM Teller AS BYTE
DIM Waarde AS BYTE ;waarde komt al met 0 tm 9 zonder berekening
PORTB = %00000000
TRISB = %00000000
WHILE 1 = 1
Tel = 12345 ;word groote
Waarde = 5
FOR Teller = 1 TO 5
Digi[Teller] = DIG Tel , Teller - 1 ; getal opslaan
Digi[Teller] = Teller << 4 ; 00001001 --> 1001000 conversie (bijv.)
PORTB = Digi[Teller] + Waarde ;10010000 + 00001010 = 10011010(bijv.)
DELAYMS 1000
NEXT
WENDtokkoo
direct duidelijk eenvoudig
Op 21 juli 2010 08:46:42 schreef loopycoaster:
Doe je het voor het andere display (die op portb.0 tm 3 zit) hetzelfde als hier? dus elke bit van portb apart aansturen?
Dan kan je ook beide displays in 1 keer aansturen, "Waarde" is even de waarde van het display wat aan portb.0 tm 3 zit:DIM Tel AS WORD DIM Digi[5] AS BYTE DIM Teller AS BYTE DIM Waarde AS BYTE ;waarde komt al met 0 tm 9 zonder berekening PORTB = %00000000 TRISB = %00000000 WHILE 1 = 1 Tel = 12345 ;word groote Waarde = 5 FOR Teller = 1 TO 5 Digi[Teller] = DIG Tel , Teller - 1 ; getal opslaan Digi[Teller] = Teller << 4 ; 00001001 --> 1001000 conversie (bijv.) PORTB = Digi[Teller] + Waarde ;10010000 + 00001010 = 10011010(bijv.) DELAYMS 1000 NEXT WEND
Ik zal me hier eens in gaan verdiepen.
noone
483726095 / Een foto zegt meer dan 1000 woorden.
Digi[Teller] = DIG Tel , Teller - 1 ; getal opslaan
Digi[Teller] = Teller << 4 ; 00001001 --> 1001000 conversie (bijv.)
PORTB = Digi[Teller] + Waarde ;10010000 + 00001010 = 10011010(bijv.)
moet dat niet zijn:
Digi[Teller] = DIG Tel , Teller - 1 ; getal opslaan
Digi[Teller] = Digi[Teller] << 4 ; 00001001 --> 1001000 conversie (bijv.)
PORTB = Digi[Teller] + Waarde ;10010000 + 00001010 = 10011010(bijv.)
mvg,
noone.
loopycoaster
Mijn youtube profiel: http://www.youtube.com/user/PicBasicMaster
Oh ja sorry!
Klopt noone, ik had het even over moeten lezen voor de fouten!
Het kwam er anders uit op mijn scherm dan het in mijn hoofd zat.