Beste forum leden.
Ik heb dit eenvoudige stukje code van de picbasic website gehaald en een klein beetje veranderd.
Het lijkt allemaal te werken maar als ik op poort A.0 en A.1 een Led aansluit.
Dan gaan die niet helemaal uit.
Op poorten B.0 en B.1 zit een 470 Ohm pulldown weerstand naar GND.
Hang ik poorten B.0 en B.1 rechtstreeks aan de GND dan gaan de led's wel uit maar dat gaat natuurlijk fout als ik de poorten hoog maak.
Ik doe ongetwijfeld iets verkeerd maar wat?


DEVICE 16F628A                                    
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE                                  

DELAYMS 5000                               
TRISA = %11111100                                                 
TRISB = %11111111                                 
PORTB_PULLUPS ON                                   
CLEAR     
                                   
WHILE 1 = 1                                       
  IF PORTB.0 = 1 THEN HIGH PORTA.0                          
  IF PORTB.1 = 0 THEN LOW PORTA.0                           
  IF PORTB.0 = 0 THEN HIGH PORTA.1                        
  IF PORTB.2 = 0 THEN LOW PORTA.1                         
WEND
END   

Waarom zou je pull-ups en pull-downs aan een pin hangen???

Hang ik poorten B.0 en B.1 rechtstreeks aan de GND dan gaan de led's wel uit maar dat gaat natuurlijk fout als ik de poorten hoog maak.

Wil je ze dan ook als outputs gebruiken? Anders kun je gewoon naar Gnd schakelen.

Je laatste regel IF PORTB.2 = 0 THEN LOW PORTA.1

moet zijn: IF PORTB.1 = 1 THEN LOW PORTA.1

Alvast bedankt voor de reacties.
Maar ik zie aan de reacties dat ik niet duidelijk ben in mijn vraagstelling.:-)
Even een korte uitleg.
Op poort b.0 zit een relais kontact en op de poorten B.1 en B.2 zitten microswitches.
En de poorten A.0 en A.1 gaan naar een L293.
De bedoeling is dat wanneer er een 12 voeding aangaat er een motor maar een bepaalde positie loopt en door een eindschakelaar stopt.
Als die 12 volt voeding wegvalt (relais kontact naar GND)dan moet de motor teruglopen en weer stoppen op de eindschakelaar.
De eindschakelaars zijn de microswitches op poorten B.1 en 2.
Dit werkt eigenlijk zo als ik het wil maar de motor blijft heel langzaan doorlopen.
En dat wil ik dus niet.

Werk eerst een alle mogelijkheden uit:
PORTB.0/1/2 geeft 2^3 = 8 mogelijkheden, jij beschrijft slechts de helft. Dan per combinatie aangeven wat er moet gebeuren.
Een combinatie die niet kan optreden mag je overslaan.


PORTB 0    1     2   |  PORTA.0   1
=====================|=============
      0    0     0   |    ?       ?
      1    0     0   |    ?       ?
      0    1     0   |    ?       ?
      0    0     1   |    ?       ?
      1    1     0   |    ?       ?
      0    1     1   |    ?       ?
      1    0     1   |    ?       ?
      1    1     1   |    ?       ?

En in plaats van "HIGH" en "LOW" PORTx.y = 1 of 0.

Zoiets zou ik doen:


DEVICE 16F628A                                    
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
ALL_DIGITAL TRUE                                  
                             
TRISA = %11111100                                                 
TRISB = %11111111

symbol Gesloten = 0
symbol Open = 1

symbol Relaiscontact = portb.0
symbol Motor1 = porta.0
symbol Motor2 = porta.1
symbol S1 = portb.1
symbol S2 = portb.2   
                              
PORTB_PULLUPS ON   
delayms 5000                                
CLEAR     
                                   
WHILE 1 = 1                                       
  if relaiscontact = Gesloten and s1 = 1 then
       motor1 = 1
  elseif relaiscontact = open and s2 = 1 then
       motor2 = 1
  else  ;wanneer de microswitches goed staan icm het relaiscontact
      motor1 = 0
      motor2 = 0
  endif              
WEND
END   

@hadv.
Ik was ook al op picbasic met de tabellen bezig maar daar ben ik nog niet uit.
De tabel ziet er als volgt uit
PORTB 0 1 2 | PORTA.0 1
=====================|=============
0 1 0 | 1 0
0 0 1 | 0 0
1 1 0 | 0 0
0 1 1 | 1 0
1 0 1 | 0 1
1 1 1 | 0 1
@loopycoaster
Toen ik mijn vorige commentaar neer schreef zat ik op mijn werk en had ik het niet goed bekeken.
Nu de code in de Pic gezet en het werkt. :-)
Super bedankt maar nu vraag ik mij nog steeds af hoe het kan dat in mijn eerste bedenksel de led niet helemaal uit ging.
Ik denk dat dat kwam door het relais kontakt maar weet de reden niet.
Kan je dat verklaren?
Wie weet leer ik er nog iets van.:-p

[Bericht gewijzigd door pa3gws op (30%)]