Deze simpele code doet het om de één of andere reden niet, heb getest door de ingang met een draadje aan de nul, of de 5V te verbinden en er gebeurd niets. De uitgang is zeker niet kapot want dat heb ik getest met een ander programma. Ik denk dat het iets met de code is...
DEVICE 16F628A ;We gebruiken een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF ;Fuses instellen
ALL_DIGITAL TRUE ;Alle info is digitaal
SYMBOL LED1 = PORTA.7 ;Poort A.7 heeft nu de naam LED1
SYMBOL S1 = PORTB.0 ;Poort B.0 heeft nu de naam S3
;Poort B.0 heeft nu de naam S3
;76543210
PORTA = %00000000 ;Alle niveaus van PORTA laag
PORTB = %00000000 ;Alle niveaus van PORTB laag
TRISA = %00000000 ;Alles als uitgang
TRISB = %00000011 ;poort 0 als ingang, al de rest uitgang
PORTB_PULLUPS ON
While 1 = 1
If S1 = 1 then
High led1
else
low Led1
End if
Wend ;Einde hoofdloop
END ;Einde programma
euh de leek aan het zoeken,
maar is het niet zo dat als de ingang 1 is de led oplicht voor n enkele miliseconde en dan het programma al naar einde programma gaat???
pfffff k weet het anders ook niet hoor
http://pent.no/Vaer.aspx?ID=84337
600 MOH
tot nu toe koudste temp -29,9
De logica van Windows: klik op START om af te sluiten.
Mijn verrekijker vergroot 10x, maar bij de 11e keer werkte hij ook nog
Ik schrijf dan nog zelf
PORTB_PULLUPS ON
wat wilt zeggen dat de poort standaard "1" is. Hierdoor bleef de uitgang natuurlijk steeds hoog. Het probleem is opgelost door de If S1 = 1 te vervangen door If S1 = 0!
Ok maar dan heb ik nog steeds een probleem, er is nu een "0" nodig om de leds aan te doen gaan. Nu zou ik graag het signaal omzetten dat een "1" de leds aan doet gaan. Dit zou ik kunnen doen met een NOT poort maar dat heb ik zo direct niet bij de hand. Hebben jullie een kort idee?
De stuurlijn geeft een "1" aan de pic wanneer de leds aan moeten gaan, ik wil dit dus omdraaien dat de "1" een "0" wordt. Kan ik dit niet oplossen met discrete componenten ipv ics? Ik probeer het op te lossen maar het lukt niet echt meer op dit uur precies!
Ja maar dat kan ik niet echt gebruiken. Ik heb een 5V stuursignaal, en dat signaal moet omgezet worden naar het geinverteerde, 0V dus, en als het stuursignaal 0V is moet dat omgezet worden naar 5V. Zonder een Led, want de uitgangsled die jij tekent, wordt aangestuurd door de pic!
Dat kan wel, dan laat je de LED uit het bovenstaande schema weg, je knoopt die 270E weerstand aan de +5V en de collector van de transistor komt aan de ingang van je PIC.
Ingang hoog -> transistor geleidt -> collector komt aan massa -> PIC-poort laag (let wel, niet 0V, maar 0V + de spanning over de transistor (weet zo even niet hoeveel precies, gok ongeveer 1V))
Ingang laag -> transistor spert -> PIC-poort hoog.
Alle elektronica bestaat uit rook: als er iets kapot gaat, komt het naar buiten.
Ik heb het gedaan moet dus 2 2K2 weerstanden aan de basis van de transistor omdat ik 3k3 niet had! Geen probleem toch hé?
En iets raars is dat de schakeling doet wat ze moet doen, maar bij 5V komt normaal de Uce spanning op de collector, maar die is ongeveer 0.068V... Terwijl ik volgens de datasheet toch 0,6V zeker zou moeten hebben... Vreemd toch hé?
En bij 0V op de ingang is de collectorpin mooi 5V!
ik vind het nogaal raar dat we inverterende schakelingen gaan gebruiken om een bit om te draaien in een pic.
ik dacht dat wanneer je interne pull-ups aan zijn, je enkel ingangen kan gebruiken, geen uitgangen. maar ik ben dit niet 100% zeker.
Zet eens trisb = %11111111. (en misschien moet je eerst je pullups aanzetten en dan zeggen of de poort in of uit is)
Zou het niet beter zijn om gewoon die interne pull-up weg te laten, en aan je ingang B.0 een weerstandje naar de +5V te hangen?
Dan is alles toch opgelost?
ingang B.0 open -> = 1, dus led aan
ingang B.0 aan de massa -> 0, dus led uit
En wil je het omgekeerd, verander je gewoon de waardes.
En schrijf es:
portb.0 = 0
portb.0 = 1
ipv
high led1
low led1
Sorry mijn vorige reactie klopt niet, ik zie dat je basic gebruikt. Dom ik ben niet anders gewend dan in c te werken.
Echter hoezo high LED1, als s1 = 1, dus als LED 1 hoog is maak je hem weer hoog hij blijft dan dus hoog en dus aan. Je zou verwachten als hij hoog is maak je hem laag dus low. Dan gaat de LED aan en uit wat schijnbaar de bedoeling is. Echter dan werkt het nog niet omdat je geen delay hebt toegevoegd nu knalt de PIC met een rotgang door de statements en maakt steeds LED 1 hoog. Na de statement high LED1 en low LED1 moet je een delay inbouwen. In C is dat zoiets als Delay_ms(250); , het Basic equivalent weet ik niet, maar dan kan je opzoeken in de documentatie.
Joeri Fr schreef:ik dacht dat wanneer je interne pull-ups aan zijn, je enkel ingangen kan gebruiken, geen uitgangen. maar ik ben dit niet 100% zeker.
Zet eens trisb = %11111111. (en misschien moet je eerst je pullups aanzetten en dan zeggen of de poort in of uit is)
Nee hoor. De poorten kunnen dan nog gewoon als uitgang gebruikt worden.
dubbeld100 schreef:Sorry mijn vorige reactie klopt niet, ik zie dat je basic gebruikt. Dom ik ben niet anders gewend dan in c te werken.
Echter hoezo high LED1, als s1 = 1, dus als LED 1 hoog is maak je hem weer hoog hij blijft dan dus hoog en dus aan. Je zou verwachten als hij hoog is maak je hem laag dus low.
Daar dient de else voor. Als S1 niet hoog is voert hij het else gedeelte uit dus pin laag. Als S1 hoog is dan led hoog
Dan gaat de LED aan en uit wat schijnbaar de bedoeling is. Echter dan werkt het nog niet omdat je geen delay hebt toegevoegd nu knalt de PIC met een rotgang door de statements en maakt steeds LED 1 hoog. Na de statement high LED1 en low LED1 moet je een delay inbouwen. In C is dat zoiets als Delay_ms(250); , het Basic equivalent weet ik niet, maar dan kan je opzoeken in de documentatie.
Maakt hier niks uit.
De basic code voor een delay is delayms tijd.