Archiv verlassen und diese Seite im Standarddesign anzeigen : shiftout programmieren-wie bcd-code erzeugen?->gelöst
helimike0705
04.03.2007, 18:53
hallo,möchte mit dem befehl shiftout mein schieberegister laden,es soll
ein bcd code ausgegeben werden der die uhrzeit enthält.die zeit sollte ohne rtc ,also nur per software gemacht werden.okay,das problem ist jetzt die softuhr kann ich ja mit ein paar schleifen proggen,aber wie bekomme ich die zahlen die ich habe, in bcd-code gewandelt um diese dann in mein schieberegister zu laden.
die anzeige besteht (schon vorhanden) aus 3x mc14015 und 6x mc14511.
also die uhr läuft schon mit einem lcd, nun soll sie auf die 7segmentanzeige.
edit: ich brauche immer nur 4 bits und keine 8 wie mir der
befehl bin( ) liefert.
helimike0705
06.03.2007, 17:04
hatt keine eine idee wie ichdas realiesieren kann,sprich die zaheln der uhr
sollen in bcd-code ausgegeben werden,wie die 1 z.b. mit 0001 oder die
9 mit 1001.
beispiel wie spät ist es hier
0010 0011 0101 0111 0011 0110
wenn das so ausgeshiftet würde ware ich am ziel.
Action
Convert a variable into its BCD value.
Syntax
var1 = MAKEBCD(var2)
Remarks
var1
Variable that will be assigned with the converted value.
Var2
Variable that holds the decimal value.
When you want to use an I2C clock device, which stores its values as BCD values you can use this function to convert variables from decimal to BCD.
For printing the bcd value of a variable, you can use the BCD() function which converts a BCD number into a BCD string.
See also
MAKEDEC , BCD , MAKEINT
Example
Dim A As Byte
A = 65
Lcd A
Lowerline
Lcd Bcd(a)
A = Makebcd(a)
Lcd " " ; A
End
helimike0705
08.03.2007, 18:59
hallo sigint:
habe ich in der hilfe auch gefunden,kann damit nichts anfangen.
jetzt habe ich mal eine prog geschrieben,das soll mir den binärcode
in den shiftout schreiben.im sim erhalte ich die zahlen für die sekunden
und den bin für die sekunden,nur schreibt er mir nichts in den shiftout
helimike0705
09.03.2007, 16:54
so habe ein paar fehler im vorherigen programm gefunden,jetzt läuft es zwar,aber der bcd-code der geschickt wird ist seitenverkehrt.
sprich bei einer eins die gesendet wird ,wird "1000" geschickt und das wäre für meinen mc14015 eine acht,genau anders herum wäre richtig "0001".
wie kann ich den bcd-code reversieren
kolisson
10.03.2007, 02:12
beachte mal... was unter option steht !
SHIFTOUT pin , pclock , var , option [, bits , delay ]
Remarks
Pin
The port pin which serves as a data output.
Pclock
The port pin which generates the clock.
Var
The variable that is shifted out.
Option
Option can be :
0 – MSB shifted out first when clock goes low
1 – MSB shifted out first when clock goes high
2 – LSB shifted out first when clock goes low
3 – LSB shifted out first when clock goes high
Bits
Optional number of bits to shift out.
Delay
Optional delay in uS. When you specify the delay, the number of bits must also be specified. When the default must be used you can also use NULL for the number of bits.
helimike0705
10.03.2007, 09:54
hallo kollision
ja die option habe ich jetzt schon erkannt,habe jetzt eine "null",verwendet.
also shiftet er jetzt seitenverkehrt,"00001000" .so gesehen von rechts nach links,schon mal gut.nur benötige ich die letzten vier bits."1000",
wie kann ich die ersten vier bits abschneiden.da ich jede zahl der uhr bearbeite,sind jetzt 6 shiftfout befehle im programm.der mc14015 ist ein doppelter 4 bit schieberegister,also für 2 zahlen zuständig.bei einer zahl geht die sache ja noch,habe mal eine -4 in den befehl geschrieben.
kolisson
10.03.2007, 12:49
da schreibe ich dir das gleiche wie gestern! kannst du nicht lesen oder hast du die language referece von bascom (in der hilfe) noch nie angeklickt ?
jetzt achtest du halt mal auf die option "BITS"
gruss
SHIFTOUT pin , pclock , var , option [, bits , delay ]
Remarks
Pin
The port pin which serves as a data output.
Pclock
The port pin which generates the clock.
Var
The variable that is shifted out.
Option
Option can be :
0 – MSB shifted out first when clock goes low
1 – MSB shifted out first when clock goes high
2 – LSB shifted out first when clock goes low
3 – LSB shifted out first when clock goes high
Bits
Optional number of bits to shift out.
Delay
Optional delay in uS. When you specify the delay, the number of bits must also be specified. When the default must be used you can also use NULL for the number of bits.
helimike0705
10.03.2007, 12:55
habe ich gemacht, eine 3 schreibt mir die bits von links nach rechts.
eine null von rechts nach links. problem ist die bits sind seiten verkehrt.
von links nach rechts schreiben kommt die folge eine 1 eine 0 eine 0 eine 0 ,ergibt im mc 14015 eine 8 ,brauche aber eine 0 0 0 1 für die eins.
die hilfe habe ich benutz und dies da auch gefunden.okay prog erst seit dez 06 mit bascom,muss also noch lernen wie was funzt.
danke für dein hilfe.
wie kann ich den bcd code mit swap drehen .
zum veranschauung soll aus 12345678 eine 87654321 werden
[/code]
kolisson
10.03.2007, 14:29
alo ich greife das aus deinem vorletzten post nochmal auf:
ja die option habe ich jetzt schon erkannt,habe jetzt eine "null",verwendet.
also shiftet er jetzt seitenverkehrt,"00001000" .so gesehen von rechts nach links,schon mal gut.nur benötige ich die letzten vier bits."1000",
das scheint ja schonmal ganz okay zu sein. du willst also die führenden 4 nullen loswerden, die von links (also msb) beginnen. ich denke das dir der befehl " Shift variable , left, 4 " helfen kann. dadurch schiebst du die bits in der variablen erstmal 4 stellen nach links. die oberen vier 0 fallen dann ins nichts. anschliessend mit dem shiftout befehl mit null und auf 4 bits begrenzen. dann sollte es stimmen.
ggf musst du die variable vorher mal zwischenspeichern, falls du die oberen 4 bits noch brauchst.
gruss
helimike0705
10.03.2007, 14:40
genau das habe ich jetzt schon mal probiert,habe den shift befehl in das programm eingefügt nach der anweisung a=str(second1)und vor dem shiftout,leider kein erfolg.
jetzt hast du mich aber verstande wie ich es meinte,war wohl etwas unglücklich ausgedrückt von mir.
schaue dir mal den letzten code an.
helimike0705
10.03.2007, 15:25
habs endlich geschafft, dank deines denkanstosses , kollision.
fehler war auch die dimensionierung der variablen als sting ,nach umstellung des prog mit dem shift x,left,4.
kolisson
10.03.2007, 15:32
na super.. wenn jetzt klappt.
für die zukunft noch ein tip.
ich hab da mal was ausprobiert, was ich so eigentlich nicht in der bascom anleitung gefunden habe. und es klappte. un zwar:
bei den ports sagt man ja z.b. portb.6. das meint fa das 6te bit des ports.
diese schreibwweise auf ne byte-variable angewndt funzt auch prima.
also variable.0 gint das rechte bit wieder.
variable.6 halt das 6te.
also könnte man sich seinen shiftout selber schreiben.
taktleitung = 1
ausgangsleitung = variable.0
toggle taktleitung
ausgansleitung = variable.1
toggle taktleitung
und so weiter
gruss
helimike0705
11.03.2007, 10:42
hallo,da nun mein programm läuft,möcht ich es auch anderen zukommen
lassen,damit sie wie ich,etwas lernen können oder nur mal als beispiel
sich infos holen.ich bedanke mich auch nochmal bei den helfen.
mike
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.