Simpel PIC basic programma doet het niet

Alle vragen m.b.t digitale schakelingen m.b.v. losse i.c's
en oplossingen m.b.v. PIC processoren.
Gebruikersavatar
Termike
Berichten: 279
Lid geworden op: ma 14 mar 2005, 13:39
Locatie: Hoevenen, België. .

Simpel PIC basic programma doet het niet

Bericht door Termike »

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...

Zien jullie wat?

Code: Selecteer alles

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
Alvast bedankt!
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Zou normaal gewoon moeten werken.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
JARI NETWORKS
Berichten: 1697
Lid geworden op: zo 23 apr 2006, 19:01
Locatie: Hedalen. .. Noorwegen .. .. .. .. .. .. ...

Bericht door JARI NETWORKS »

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
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

Die While 1 = 1 Wend is een eindeloze lus. Zolang 1 = 1 wordt die doorlopen.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
Gebruikersavatar
Termike
Berichten: 279
Lid geworden op: ma 14 mar 2005, 13:39
Locatie: Hoevenen, België. .

Bericht door Termike »

Ach verdorie toch... Ik heb het zelf gevonden...

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!

Toch bedankt allemaal!


Groetjes
Gebruikersavatar
Termike
Berichten: 279
Lid geworden op: ma 14 mar 2005, 13:39
Locatie: Hoevenen, België. .

Bericht door Termike »

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!


Alvast bedankt!


Groetjes
Gebruikersavatar
bertus
Moderator
Moderator
Berichten: 2485
Lid geworden op: wo 14 feb 2007, 20:35
Locatie: Amsterdam. .. .. .

Bericht door bertus »

Hallo,

Wat gebeurt er wanneer je High led1 en low Led1 verwisseld.
Dan draai je de reactie toch om.

Groeten,
Bertus
Je hoeft niet alles te weten,als je het maar weet te vinden.
Als je iets vraagt lijk je misschien dom.
Als je niets vraagt blijf je dom.

Ik beantwoord geen vragen in PM's.
Dit gaat voorbij aan de ideeen van het forum,
het delen van informatie.
Gebruikersavatar
Termike
Berichten: 279
Lid geworden op: ma 14 mar 2005, 13:39
Locatie: Hoevenen, België. .

Bericht door Termike »

Heb ik gedaan, dan blijft de uitgang continu hoog... Vreemd hé?
Gebruikersavatar
bertus
Moderator
Moderator
Berichten: 2485
Lid geworden op: wo 14 feb 2007, 20:35
Locatie: Amsterdam. .. .. .

Bericht door bertus »

Hallo,

Heeft het te maken met lower en upper case?
In de declaratie staat LED1
in je lus staan led1 en Led1.

Groeten,
Bertus
Je hoeft niet alles te weten,als je het maar weet te vinden.
Als je iets vraagt lijk je misschien dom.
Als je niets vraagt blijf je dom.

Ik beantwoord geen vragen in PM's.
Dit gaat voorbij aan de ideeen van het forum,
het delen van informatie.
Gebruikersavatar
Termike
Berichten: 279
Lid geworden op: ma 14 mar 2005, 13:39
Locatie: Hoevenen, België. .

Bericht door Termike »

Neen, ik zou gewoon graag met discrete componenten een NOT poort maken. Iemand enig idee hoe?

Merci al


Groetjes
Gebruikersavatar
bertus
Moderator
Moderator
Berichten: 2485
Lid geworden op: wo 14 feb 2007, 20:35
Locatie: Amsterdam. .. .. .

Bericht door bertus »

Hallo,

Hier is een hardware invertor met LED.

Groeten,
Bertus
Bijlagen
Invertor_met_LED.jpg
Invertor_met_LED.jpg (4.52 KiB) 33620 keer bekeken
Je hoeft niet alles te weten,als je het maar weet te vinden.
Als je iets vraagt lijk je misschien dom.
Als je niets vraagt blijf je dom.

Ik beantwoord geen vragen in PM's.
Dit gaat voorbij aan de ideeen van het forum,
het delen van informatie.
Gebruikersavatar
Termike
Berichten: 279
Lid geworden op: ma 14 mar 2005, 13:39
Locatie: Hoevenen, België. .

Bericht door Termike »

bertus schreef:Hallo,

Hier is een hardware invertor met LED.

Groeten,
Bertus
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!


Groetjes
geert
Berichten: 129
Lid geworden op: di 10 feb 2004, 20:43
Locatie: Zwolle
Contacteer:

Bericht door geert »

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.

http://www.roenskeep.net
Gebruikersavatar
bertus
Moderator
Moderator
Berichten: 2485
Lid geworden op: wo 14 feb 2007, 20:35
Locatie: Amsterdam. .. .. .

Bericht door bertus »

Hallo,

Als je een IC met invertors wilt kun je de HEF4049 gebruiken.

Groeten,
Bertus
Bijlagen
HEF4049.jpg
HEF4049.jpg (27 KiB) 33598 keer bekeken
Je hoeft niet alles te weten,als je het maar weet te vinden.
Als je iets vraagt lijk je misschien dom.
Als je niets vraagt blijf je dom.

Ik beantwoord geen vragen in PM's.
Dit gaat voorbij aan de ideeen van het forum,
het delen van informatie.
Gebruikersavatar
Termike
Berichten: 279
Lid geworden op: ma 14 mar 2005, 13:39
Locatie: Hoevenen, België. .

Bericht door Termike »

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!
Gebruikersavatar
bertus
Moderator
Moderator
Berichten: 2485
Lid geworden op: wo 14 feb 2007, 20:35
Locatie: Amsterdam. .. .. .

Bericht door bertus »

Hallo,

Wat voor transistor gebruik je?
De Uce is afhankelijk van de basis en collectorstroom.

Groeten,
Bertus
Bijlagen
BC547.jpg
BC547.jpg (67.43 KiB) 33576 keer bekeken
Je hoeft niet alles te weten,als je het maar weet te vinden.
Als je iets vraagt lijk je misschien dom.
Als je niets vraagt blijf je dom.

Ik beantwoord geen vragen in PM's.
Dit gaat voorbij aan de ideeen van het forum,
het delen van informatie.
Joeri Fr
Berichten: 744
Lid geworden op: wo 29 sep 2004, 18:22
Locatie: Brugge (B). .. .

Bericht door Joeri Fr »

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
dubbeld100
Berichten: 4
Lid geworden op: ma 21 apr 2008, 21:49

Bericht door dubbeld100 »

Hoi

Je schrijft in je code S1 = 1,

ECHTER C schrijft voor S1 == 1

S1 = 1 betekend: ken 1 toe aan S1 en is dus altijd waar
S1 ==1 betekend: is S1 gelijk aan 1
dubbeld100
Berichten: 4
Lid geworden op: ma 21 apr 2008, 21:49

Bericht door dubbeld100 »

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.
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

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.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

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.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
dubbeld100
Berichten: 4
Lid geworden op: ma 21 apr 2008, 21:49

Bericht door dubbeld100 »

OK, Ik dacht te snel aan een knipperlicht, maar het is gewoon een statusovername. A7 volgt B0.

Andere tip voeg toe CMCON = 0X07, dit zet de comparators uit. Dit heeft mij ook al eens geholpen maar dan bij een andere PIC type
Gebruikersavatar
Stynus
Site Admin
Site Admin
Berichten: 5971
Lid geworden op: vr 16 mei 2003, 20:45
Locatie: Overpelt (België)
Contacteer:

Bericht door Stynus »

dubbeld100 schreef: Andere tip voeg toe CMCON = 0X07, dit zet de comparators uit. Dit heeft mij ook al eens geholpen maar dan bij een andere PIC type
Dat doet hij al met ALL_DIGITAL TRUE denk ik.
Met vriendelijke groet,
Stynus
http://www.elektronicastynus.be
dubbeld100
Berichten: 4
Lid geworden op: ma 21 apr 2008, 21:49

Bericht door dubbeld100 »

Tja,

Ik heb er een paar keer naar gekeken en ook naar de datasheet van de PIC, vreemd dat dit niet werkt.
Yoepie
Berichten: 11
Lid geworden op: wo 30 apr 2008, 8:53
Locatie: . .

Bericht door Yoepie »

stynus schreef:
dubbeld100 schreef: Andere tip voeg toe CMCON = 0X07, dit zet de comparators uit. Dit heeft mij ook al eens geholpen maar dan bij een andere PIC type
Dat doet hij al met ALL_DIGITAL TRUE denk ik.
Met ALL_DIGITAL TRUE worden de comparators van 16F628 digitaal
bij een 16F877 poort A + E

Mischien moet ie nog ze Mhz in vullen?
Volgens mij gebruikt ie proton, dan kan de volgende regel zo overgenomen worden.

Declare XTAL = 4
Plaats reactie