PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Funkübertragung bei PICS



09.08.2004, 12:03
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

09.08.2004, 12:53
](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,)

D.Stolarek
09.08.2004, 15:17
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

Pathfinder
09.08.2004, 20:27
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.

D.Stolarek
10.08.2004, 07:59
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

BITTEHelftMir!?!?

D.Stolarek
11.08.2004, 13:12
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

D.Stolarek
12.08.2004, 13:21
hi leute
hab mal eben eine andere frage:
wie kann ich zwischen den Bänken hin und her wechseln?

Danke im Vorraus ^_^

Jooker
12.08.2004, 14:01
Hab nicht so den Plan von Assembler
aber auf www.sprut.de wird das sehr gut erklärt

D.Stolarek
12.08.2004, 14:05
ja stimmt habs voll vergessen da mal wieder rein zu schauen ^_^
danke joker :-) :D

Pathfinder
12.08.2004, 14:51
Also da kann ich dir leider auch nicht weiter helfen weil ich alles in C schreibe, sorry.

D.Stolarek
16.08.2004, 08:49
habe ein bisschen gegoogelt und dies gefunden
das ich mit hilfe von RP0 und RP1 arbeiten soll und bits setzen soll

mit bsf und bcf waren beispiel drin
so siehts bei mir aus:

BCF STATUS, RP0 ; RP0 wird auf 0 gesetzt
BCF STATUS, RP1 ; RP1 wird auf 0 gesetzt
BSF STATUS, RP0 ; RP1 wird auf 1 gesetzt um zu bank 1 zu wechseln

nach den beispielen müsste es klappen aber da tauchen nur warnungen ohne ende auf und der simulator versteh das auch nich den der timer startet nich

so sieht der code aus meines timers (timer0):
BSF OPTION_REG, T0CS ; hier wird in der Speicherzelle T0SC die 1 gesetzt
BSF OPTION_REG, T0SE ; hier wird für RA4 die Low Flake gewählt
MOVF T0CS, F ; nun wird es unter der Speicherzelle gesichert
MOVF T0SE, F ; hier wird es unter der Speicherzelle gesichert
MOVF TMR0, W ; das ist das Timer-Register

also wenn ihr mir weiter helfen könnt wäre ich euch überaus dankbar

Bitte Helft mir

D.Stolarek
16.08.2004, 09:23
das problem ist nun gelöst
es lag daran das beim pic in der inc datei ein kleiner fehler drin ist
ich musste dies &0x7f zu den einzelnen registern setzen, da sie in der in auf 8bit eingestellt sind aber nur 7bit gehen den es gibt 2 andere bits nur noch dazu zum bank wechsel usw ^_^

danke trotzdem

D.Stolarek
16.08.2004, 10:06
wie sieht den eigentlich ungefair ein algorithmus zur dekodierung des funksignales aus?