Ik heb de ingang van de rotary encoder verplaatst van PortB.0 & B1 naar PORTB.5 en PORTB.7 maar nu werk de rotary encoder niet meer.

iemand idee hoe dit op te lossen?


Device 16F628A
Config INTRC_OSC_NOCLKOUT, CP_OFF, WDT_OFF, PWRTE_ON, LVP_OFF,MCLRE_OFF
All_Digital TRUE ;Alle ingangen digitaal 

Xtal 4 
'---------------------------LCD-------------------------------- 
Declare	LCD_DTPin = PORTB.0
Declare LCD_RSPin = PORTB.4
Declare	LCD_ENPin = PORTA.3
Declare	LCD_Interface = 4 '4-bit Interface
Declare	LCD_Lines = 2
Declare	LCD_Type = ALPHA
Declare LCD_CommandUs = 2000
Declare LCD_DataUs = 50

On_Interrupt rotary
Symbol INTF = INTCON.1        ' RB0 External Interrupt Flag
Symbol INTE = INTCON.4        ' RB0 External Interrupt Enable
Symbol GIE = INTCON.7         ' Global Interrupt Enable

Symbol SDA = PORTA.1 'I2C op poort a1 
Symbol SCL = PORTA.0 'I2C op poort a0

Symbol RotaryA  = PORTB.5  'Rotary A
Symbol RotaryB  = PORTB.7  'Rotary B
Symbol RotarySw = PORTA.4  'Rotary Encoder druk schakelaar.
Symbol PWM_Out  = PORTB.6  'PWM power output
Symbol Cycles       = 10  '(WORD) 'Cycles' van de PWM instructie

[Bericht gewijzigd door Henry S. op (0%)]

RB0 is de interruptingang, op RB5 werkt dat natuurlijk niet.
Nieuwere processors kunnen IOC (interrupt on change) gebruiken op bijna elke pin. (de 628 is een vrij oud beestje wat nog niet zo veel kon...)

[Bericht gewijzigd door Arco op (18%)]

Heeft je rotary code een software-debounce om te voorkomen dat ie rare waarden gaat uitspugen? Sommige doen dit met condensators, maar dat is helemaal niet nodig.

Nieuwe print gemaakt waarbij rotary encoder weer op PORTB.0 en PORTB.1 zit.

Je had ook de 16F628A door de 16F1847 kunnen vervangen (pin compatible)

@arco, bedankt voor de tip, gaat de 16F1847 bestellen.

de 16F628 heeft int_on_change op PortB.4-PortB.7

bij het declareren van al de interuptsettings deze code meenemen


  RBIE = 1                    'RB Port Change Int Enable Bit staat aan
  RBIF = 0                    'reset van int on change flag