Forum: Mikrocontroller und Digitale Elektronik high low überprüfung


von D.Stolarek (Gast)


Lesenswert?

hi leute
ich hab da mal ne frage kann mir einer von euch sagen wie ich bei pics
das mache das der bei einer reihenfolge von bits einen bestimmt
raussucht um dann bei einem bestimmten etwas zu starten
denn ich hab voll kein plan bin schon depri durch das
bitte helft mir
ich bin für alles dankbar

von formtapez (Gast)


Lesenswert?

Du müsstest schon genauere Angaben machen ....
Was ist das für ein Signal... Frequenz ? Was soll passieren, etc.

MfG
formtapez

von Praktikant (Gast)


Lesenswert?

Bei PIC´s könnte ich dir

www.Sprut.de

empfehlen.

Aber der Weg zu deinem Problem könnte Maskierung heissen.
Lege eine Maske über deine Reihenfolge von Bits und verknüpfe sie mit
Logisch UND. Bsp.: Es interessiert dich ob Bit 3 gesetzt ist

Deine Bits       : 0110 0101
Maske            : 0000 0100
UND-Verknüpfung  :-----------
Ergebnis         : 0000 0100

Wäre Bit 3 NULL gewesen, dann auch das Verknüpfungsergebnis.

Ich hoffe das hilft weiter.

von Reinhard Biegel (Gast)


Lesenswert?

Hallo!

Hab zwar keine Ahnung vom PIC-Befehlssatz (sondern nur 8051), aber wenn
du nicht nur 1 bit überprüfen willst, sondern die komplette bit-Folge
(sagen wir mal 8bit), würd ich sie nacheinander in ein Byte einlesen
und anschließen mit der bit-Folge xor-verknüpfen, bei der etwas
passieren soll. Ist das Ergebnis der Verknüpfung =0, so stimmen die
Folgen überein.

Willst du aus einem kontinuierlichen bit-Strom eine Folge raussuchen,
kannst du die (z.B.) 8 bits einfach durch das Byte shiften...

Wäre mein Ansatz...


Keine Übereinstimmung:

ist: 0100 1101
soll:0001 1110
--------------
xor: 0101 0011



Übereinstimmung:

ist: 0100 1101
soll:0100 1101
--------------
xor: 0000 0000

mfg
Reinhard

von D.Stolarek (Gast)


Lesenswert?

danke das hilft schon weiter
wenn noch was ist dann schreib ich hier noch was rein
danke erstmal für das

von D.Stolarek (Gast)


Lesenswert?

hi hab hier einen code ist der soweit richtig

dieser Code soll erstens die ports initialisieren und am schluss einen
timer unter RA4 starten der bei allen lows hochzählt

list      p=16F84A            ; list directive to define processor
#include <p16F84A.inc>        ; processor specific variable
definitions

  __CONFIG   _CP_OFF & _WDT_ON & _PWRTE_ON & _RC_OSC

; '__CONFIG' directive is used to embed configuration data within
.asm file.
; The lables following the directive are located in the respective .inc
file.
; See respective data sheet for additional information on configuration
word.

;***** VARIABLE DEFINITIONS
w_temp        EQU     0x0C        ; variable used for context saving
status_temp   EQU     0x0D        ; variable used for context saving

w_copy  Equ     0x20              ; Backup für Akkuregister
s_copy  Equ     0x21              ; Backup für Statusregister

;**********************************************************************
    ORG     0x000             ; processor reset vector
      goto    main              ; go to beginning of program

    ORG     0x004             ; interrupt vector location
    movwf   w_temp            ; save off current W register contents
    movf  STATUS,w          ; move status register into W register
    movwf  status_temp       ; save off contents of STATUS register
; isr code can go here or be located as a call subroutine elsewhere
    movf    status_temp,w     ; retrieve copy of STATUS register
    movwf  STATUS            ; restore pre-isr STATUS register contents
    swapf   w_temp,f
    swapf   w_temp,w          ; restore pre-isr W register contents
    retfie                    ; return from interrupt

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

;*****************************************************
;*   hier soll nun eine Überprüfung stattfinden     *
;*****************************************************


  END


also das was von eurer seite noch cool wäre wenn ihr mir irgendwie
erklärt wir man nun macht das einen bestimmten raus sucht und da dann
anfängt mit etwas anderem

danke im vorraus

von Oliver Rogasch (Gast)


Lesenswert?

Warum legst du denn dein Signal nicht auf den Interrupt-Pin, wenn ich
mich recht entsinne war das RB0. Da kannst du dann dein
"was-auch-immer" in der ISR ausführen bzw. starten.

Gruß

Oliver

von D.Stolarek (Gast)


Lesenswert?

und wozu benötige ich den interrupt?
ich kann doch den timer oder so auch ohne interrupt machen
oder geht das einfacher mit interrupt?

von D.Stolarek (Gast)


Lesenswert?

hmm
das was ich mich am meisten frage ist:
Wie mach ich das, das er bei den bits zählt, wieviele ms er braucht zum
nächsten bit?
also das ist mein größtest problem, da ich keine ahnung von assembler
hab.
ich hab bisher mit c gearbeitet und habe keine pics programmiert
sondern kleine witzige spiele.
und nun assembler WIE GEHT DAS RICHTIG?
mit 0 und 1 alles machen das ist für mich ne neue welt!!
BITTE HELFT MIR meine Aufgabe zu lösen.

von Profi (Gast)


Lesenswert?

Vielleicht könntest Du uns mal sagen, was Du eigentlich genau willst,
also ein bisschen drumrum, dann fällt uns auch was dazu ein.

Woher kommt das Signal, welche Frequenz, welches Bit soll gezaehlt /
geprüft werden, was soll dann gemacht werden.

von D.Stolarek (Gast)


Lesenswert?

also es gibt 4 bereiche und alle 8bit lang
Sync wo die zeit bei den bits 2ms sind
DByte wo es bits mit 1ms und 0,5ms gibt
Flags wo es bits mit 1ms und 0,5ms gibt
CHK wo es bits mit 1ms und 0,5ms gibt

so und wenn man das geräte aktiviert soll man solange warten bis er
sync erkannt hat und dann erst anfangen

das was ich machen soll ist ein Pedalkraftmesser der noch zusätzlich
druck misst und das soll über funk übertragen werden und das soll auch
empfangen werden

von Himbi (Gast)


Lesenswert?

weisst du vielleicht wie man zwischen den einzelnen Bänken eines PIC hin
und her wechseln kann?

wäre dir sehr dankbar :-)

von D.Stolarek (Gast)


Lesenswert?

sorry himbi ich hab selbst keine ahnung und probleme diese einzelnen
dinge zu erstellen
und www.sprut.de hat mich nich gerade weit gebracht einige dinge davon
haben mich eher verwirrt

naja sorry das ich dir nich helfen kann

von Himbi (Gast)


Lesenswert?

d.stolarek das problem ist so zu lösen
du musst vor die register &0x7f das hier setzten da in der inc datei
8bit gesetzt sind und bei dem pic nur 7bit gehen^_^

von Himbi (Gast)


Lesenswert?

toll wegen dir wollen mich die leute aus dem pic microcontroller
rauswerfen
warum hast du da bloß scheisse gebaut
und mach bei der signatur mein zeug wieder weg
ich will keinen ärger mit denen da haben
ich bin hilflos ohne hilfe als anfänger gehts nich leicht vorran

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.