PIC 16F684 van knipperlicht naar... (pagina 6)

Digitale input

Schema      JAL code


Naast analoge input is er natuurlijk ook nog digitale input.

Een heel eenvoudig programma om dit te demonstreren. Een drukknop is via een pull-up weerstand aangesloten op pen RA3. Op het display komt de melding "OFF". Tijdens het indrukken van de schakelaar komt de melding "ON". Heel eenvoudig.

  ;-------------------------------------------------------------------------------
;instellingen voor de schakelaar
;-------------------------------------------------------------------------------
alias switch is pin_A3
pin_A3_direction
= input
const byte sw_on[] = "ON "
const byte sw_off[] = "OFF"
 

De instellingen hoeven niet veel uitleg: pin A3 wordt als ingang geconfigureerd en twee constante strings worden gedefiniëerd voor de tekst "ON/OFF"

Pin A3 als input... Pin A3 kan alleen maar als input dienen. Het is één van de 'speciale' aansluitpennen van de PIC. Pin A3 is de resetpin van de chip en moet via een pull-up weerstand met de positieve voedingsspanning verbonden zijn.
Op die manier is pin A3 echter voor niets anders meer te gebruiken. Wanneer we die pin wel willen gebruiken, moeten we de processor laten weten dat hij zelf (intern) zijn reset moet behandelen en dat doen we tijdens de configuratie-instellingen van de processor:

  pragma target MCLR internal ;reset internally
 

De MainLoop spreekt voor zichzelf: de toestand van de schakelaar wordt bekeken en afhankelijk van die toestand komt ON/OFF op het scherm.

  ;-------------------------------------------------------------------------------
forever loop
  
lcd_cursor_position(1,0)
  ;switch is laag-waar
  
if(!switch)then
    
print_string(lcd, sw_on)
  else
    
print_string(lcd, sw_off)
  end if
end loop
;-------------------------------------------------------------------------------
 



Bij dit projectje ook weer een zijsprong gemaakt door in de mainloop een bistabiele schakelaar te programmeren. Eén maal drukken is aan. Terug op de schakelaar drukken is uit.

JAL code

De aangepaste MainLoop (nu ook met een eenvoudige debounce):

  ;-------------------------------------------------------------------------------
forever loop
  
sw_temp = switch
  
;eenvoudige debounce
  
_usec_delay(20)
  if(sw_temp == switch)then
    
;stabiele toestand
    ;is de schakelaarstand gewijzigd tov vorige keer?
    
if(sw_vorige != sw_temp)then
      
;ja!
      ;ingedrukt?
      
if(!sw_temp)then
        
;ja - signaleer de wijziging
        
lcd_cursor_position(1,0)
        sw_output = !sw_output
        
if(sw_output)then
          
print_string(lcd, sw_on)
        else
          
print_string(lcd, sw_off)
        end if
      end if
      
;sla deze toestand op
      
sw_vorige = sw_temp
    
end if
  end if
end loop
;-------------------------------------------------------------------------------
 


 


(pagina 4) ...PIC 16F684 van knipperlicht naar... (pagina 7)


Links

JALEdit de editor om JAL code te schrijven
JALlib de bibliotheken (en voorbeelden) en de compiler
MPLab IDE de ontwikkel- en PicProgrammeromgeving
Microchip de site van de PIC's
JalList Hulp en hopen voorbeelden