Forum: Mikrocontroller und Digitale Elektronik QuadDecoder PSoC 4


von Tobi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe im PSoC Creator eine Schaltung mit einem QauadDecoder. Dieser 
hat die Signale A und B und ein Z Signal welches den Counter 
zurücksetzen soll wenn dieses Signal kommt.
Das Problem ist das ich nicht genau weiß wie ich den Decoder in der 
main.c Datein einsetze und die Signale verarbeite, bzw. die den Counter 
zähle und auslesen kann und so. Gibt es irgendwie ein Beispiel dazu in 
Form eines Beispielcodes oder so um so etwas mal zu sehen?

Grüße

von Reiner W. (reiner_w)


Angehängte Dateien:

Lesenswert?

Die Bilder deuten darauf hin, dass du die TCPWM Komponente im 
QuadDec-Mode einsetzt, was bei PSoC 4 auch Sinn macht.
Leider hast du sonst nichts weiter zu deiner Schaltung gesagt.
Was genau soll an den Eingängen anliegen?
Für den Einsatz als Decoder für einen normalen Drehgeber würdest du 
index und stop nicht benötigen. Du willst also sicher was anderes 
machen.
Versuch doch mal zu beschreiben, was du eigentlich machen willst, vlt. 
kann dir dann auch genauer geholfen werden.
Beim Einsatz als Decoder für einen Drehgeber kannst du dann z.B. so 
vorgehen:

Bild 1 zeigt die Verdrahtung und Komponenteneinstellung.
In der main.c (falls du kein eigenes Modul einsetzt) steht dann z.B.:
1
...
2
#define INITIAL_COUNTER 0x8000     //TCPMW InitialCounter
3
/*--------rotary struct----------*/
4
typedef struct {
5
    uint32 counterValue;             //actual counter
6
    volatile uint8 swichPressed;   //status of encoder switch
7
    uint32 direction;                //encoder direction
8
} ENCODER_t;
9
10
...
11
12
QuadDec_Start();
13
14
//* see http://www.cypress.com/?app=forum&id=4749&rID=97375*//
15
QuadDec_TriggerCommand(QuadDec_MASK, QuadDec_CMD_RELOAD); 
16
17
QuadDec_SetQDMode(QuadDec_MODE_X1); //initial mode
18
19
20
//und in der while()
21
while(1) {
22
   ...
23
24
   myEncoder.counterValue = QuadDec_ReadCounter();  //read counter
25
   myCounter = myEncoder.counterValue - INITIAL_COUNTER;  
26
   myEncoder.direction = QuadDec_ReadStatus() & 1; /* read direction
27
                                                      bit0 = QuadDec_STATUS_DOWN
28
                                                      bit1 = QuadDec_STATUS_RUNNING
29
                                                      direction ist _STATUS_DOWN
30
see TRM PSoC 4200 S. 176
31
                                                          */ 
32
33
}

Natürlich ist das nur ein Auszug aus dem Project, zeigt aber die 
relevanten Schritte. Falls du das ganze nicht für einen Drehgeber 
einsetzen willst, läuft es aber ähnlich.

Reiner

von Sebi (Gast)


Lesenswert?

Hallo,

ich habe auch eine Frage zu diesem Decoder. Kann mit jemand sagen wie 
groß die Bitlänge der Counter_value des QuadDec ist? Bzw in welche 
Variable speicher ich ihn am besten ab?

Und die zweite Frage: bei meiner Auswertung wird der Counter durch ein 
Signal das in "Index" rein geht immer wieder zurückgesetzt. Dies 
funktioniert irgendwie schon, allerdings wird der Counter nicht auf Null 
zurückgesetzt. Kann mir jemand sagen wieso bzw. wie ich das hin bekomme?


Gruß

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.