Hi Leute,
ich hänge gerade ziemlich fest bei meinem PIC.
Ich soll das so machen, das der PIC Signal bekommt von 0 und 1.
es sind dazwischen zeiten, die überprüft werden müssen.
wenn z.b. ein bit 2ms lang ist soll das für das programm heißen er soll starten mit der messung des drucks und der pedalkraft.
also bisher hab ich dies gemacht:
- initialisiert von porta und b
- die bänke freigeschaltet
- unter RA4 eingestellt das er einen taktherstellen soll
- und einen timer damit steuern soll
das was jetzt aber fehlt, wo ich aber nich weiter weiss, ist die überprüfung der zeit die er benötigt .
wenn ihr mir helfen könntet wäre ich euch überaus dankbar. ^_^
Danke im Vorraus
D.Stolarek
zusätzlich hab ich noch diese info
es gibt 4 bit reihenfolgen (4mal 8bit)
einmal:
sync bit dauer 2ms
dbyte bit dauer 1 und 0,5 ms
flags bit dauer 1 und 0,5 ms
und als letztes noch
chk bit dauer 1 und 0,5 ms
Bitte helft wenn ihr könnt
Hi du,
ich würde das so machen,
soblad an meinem Eingang ein 1 Signal anliegt, wird mittels einer Schleife
eine Variable hochgezählt. Einfach immer Variable+1 und danach schauen ob noch ein 1 Signal anliegt. Wenn der Eingang von 1 auf 0 wechselt, wird die Schleife verlassen und du kannst anhand der Anzahl der Takte in der Variable schauen, wie lange der Impuls war.
Wenn das Signal von 1 auf Null wechselt schreibst du wieder eine Schleife, die dir wieder Takte in eine Variable schreibt solange du eine Null erhälst, so kannst du jedes Impuls-, Pausenverhältniss genau ausmessen.
naja aber mein problem ist das ich das in assembler programmieren muss und ich nich sorecht weiss wie ich eine schleife machen kann und eine abfrage damit der dieses signal findet
also ich schreib mal eben was ich genau schreiben soll bzw machen soll:
Entwickelt werden soll ein Funkpedalempfänger, der die vom Funkpedalkraftmesser übertragene Pedalkraft dekodiert und in ein analoges Spannungssignal im Bereich von 0 bis 1 Volt umsetzen.
mein problem daran das ich ein neuling bin in der pic programmierung und nach hilfe Suche ich habe bisher nur die initialisierung von porta und b gemacht und einen timer freigeschaltet
das heißt eine RA4 Takt hab ich auch gemacht und auf die LowFlanke gesetzt und das Timer Register hab ich auf 0 gesetzt
also wenn was TOTAL falsch ist sofort sagen und ich versuchs besser zu machen
main
;************************************************* ****
;* hier werden die einzelnen Ein-/Ausgänge und *
;* die Bänke 0/1 initialisiert *
;************************************************* ****
;*************************
;* Bank Write Verify *
;*************************
BCF STATUS, RP0 ; Bank 0
; ; hier kann irgendein
; ; Code rein
MOVF EEDATA, W ; muss in Bank 0 sein
BSF STATUS, RP0 ; Bank 1
Read
BSF EECON1, RD ; Ja, lies den Inhalt von Write
BCF STATUS, RP0 ; Bank 0
SUBWF EEDATA, W ;
BTFSS STATUS, Z ; ist ein unterschied 0?
;GOTO Write_ERR ; No, schreib Error
;*************
;* PortA *
;*************
BCF STATUS, RP0 ;
CLRF PORTA ; Initialisierung von PortA
; durch löschen des Data latches
BSF STATUS, RP0 ; Markiere Bank 1
MOVLW 0x0F ; nutzen für den DatenVerzeichniss
MOVWF TRISA ; SET RA<3:0> als Input
; SET RA4 als Output
;*************
;* PortB *
;*************
BCF STATUS, RP0 ;
CLRF PORTB ; Initialisierung von PortA
; durch löschen des Data latches
BSF STATUS, RP0 ; Markiere Bank 1
MOVLW 0xCF ; nutzen für den DatenVerzeichniss
MOVWF TRISB ; SET RA<3:0> als Input
; SET RB<5:4> als Output
; SET RB<7:6> als Output
;************************************************* ****
;* hiermit wird der Timer0 mit dem RA4 verbunden *
;* es wird der eigene Takt verwendet und nich *
;* der PIC-Takt *
;************************************************* ****
BSF T0CS, 1 ; hier wird in der Speicherzelle T0SC die 1 gesetzt
MOVF T0CS, 1 ; nun wird es unter der Speicherzelle gesichert
;************************************************* ****
;* hier drunter wird die Low-Flanke ausgewählt *
;* für RA4, damit er weiss wo er hochzählen soll *
;************************************************* ****
BSF T0SE, 0 ; hier wird für RA4 die Low Flake gewählt
MOVF T0SE, 1 ; hier wird es unter der Speicherzelle gesichert
;************************************************* ****
;* hier drunter wird nun der Inhalt des gezählten *
;* gesichert in dem Register TMR0 *
;************************************************* ****
MOVWF T0SE ; hier wird nun das Register auf die Speicherzelle geschrieben
MOVF TMR0, 0 ; das ist das Timer-Register
[schild=16 fontcolor=00008B shadowcolor=000000 shieldshadow=1]BITTE[/schild][schild=16 fontcolor=00008B shadowcolor=000000 shieldshadow=1]Helft[/schild][schild=16 fontcolor=00008B shadowcolor=000000 shieldshadow=1]Mir[/schild][schild=16 fontcolor=00008B shadowcolor=000000 shieldshadow=1]!?!?[/schild]
hab da mal ne frage
hmm...
Wie kann ich das machen, das ich mit dem befehl BTFSC oder halt BTFSS eine bestimmte zeit herausfinde?
also das wenn er überprüfen würde ob SYNC 2ms oder nur 0,5ms ist
BITTE HELFT
hi leute
hab mal eben eine andere frage:
wie kann ich zwischen den Bänken hin und her wechseln?
Danke im Vorraus ^_^
---
Hab nicht so den Plan von Assembler
aber auf www.sprut.de wird das sehr gut erklärt
ja stimmt habs voll vergessen da mal wieder rein zu schauen ^_^
danke joker
---
Also da kann ich dir leider auch nicht weiter helfen weil ich alles in C schreibe, sorry.
Lesezeichen