Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

PIC ed encoder

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] PIC ed encoder

Messaggioda Foto Utenteaduri » 14 mar 2008, 9:35

Spero di fare cosa gradita mettendo a disposizione questo codice che permette, girando la manopola dell'encoder, il conteggio avanti indietro da 0 fino a 255 con visualizzazione su LCD collegato sulla porta D del Pic16F877A.
L'ingresso e' alle porte RB0-RB1 che prenderanno in carico i 2 segnali in quadratura in uscita dall'encoder.
Un led sulla porta C discrimina la direzione.
Il codice e' in Mikrobasic.
Collegando un economico encoder meccanico (tipo volume autoradio) ha dei problemi anche col trigger col CD4093.
Con un encoder ottico ha funzionato tutto alla prima senza trigger.



Codice: Seleziona tutto
program encoder_A
'     MCU:             PIC16F877A
'     Dev.Board:       Myboard
'     Oscillator:      HS, 20.000 MHz
'     Ext. Modules:    trigger with CD4093, Lcd_2x16
'PROGRAM TO DETERMINE DIRECTION OF QUADRATURE ENCODER

DIM PORTB_OLD AS BYTE
DIM PORTB_NEW AS BYTE
dim count as byte
dim txt as string[3]

'USING A 2 BIT (QUADRATURE SYSTEM) THIS IS THE RULE:
'LOW BIT OF OLD VALUE IS ALWAYS EQUAL TO HIGH BIT OF NEW VALUE
'IF MOVING CLOCKWISE
'LOW BIT OF OLD VALUE DOES NOT EQUAL HIGH BIT OF NEW VALUE
'IF MOVING COUNTERCLOCKWISE

main:
'TRISA = 0              'RA0 LED WILL INDICATE CW; RA1 LED WILL INDICATE CCW
TRISB = %00000011      'RB0 and RB1 Inputs
TRISC = 0
PORTA = 0
PORTB = 0
LCD_init(PORTD)        'LCD su portD
LCD_out(1,1,"Numero impulsi:")
LCD_out(2,1,"Dir:")
PORTB_OLD = PORTB

my_direction:

PORTB_NEW = PORTB

IF PORTB_NEW XOR PORTB_OLD <> 0 THEN     'test for encoder change
   IF (PORTB_NEW >> 1) = (PORTB_OLD AND 1) THEN
      PORTC = 1        'CW DIRECTION
       LCD_out(2,6,"I")
       count = count-1
   ELSE
      PORTC = 0       'CCW DIRECTION
       count = count+1
       LCD_out(2,6,"A")

   END IF
END IF
bytetostr(count,txt)
     LCD_out(1,18,txt)


PORTB_OLD = PORTB_NEW

GOTO my_direction

end.


Ciao a tutti
Avatar utente
Foto Utenteaduri
435 1 5 10
Expert
Expert
 
Messaggi: 937
Iscritto il: 29 giu 2005, 23:13
Località: Genova

0
voti

[2] Re: PIC ed encoder

Messaggioda Foto UtenteAndrea1957 » 28 feb 2010, 14:39

Ciao Aduri

Complimenti per questo suggerimento, dopo che mi sarò picchiato con segnali analogici etc etc dovrò affrontare anche questo discorso!!! :) :) :)

Andrea
Avatar utente
Foto UtenteAndrea1957
0 2
 
Messaggi: 34
Iscritto il: 9 feb 2010, 22:01


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 37 ospiti