Hoe komt het dat de ingangen van mijn pic nogal traag reageren ?
Ik heb de on chip pullups geactiveerd en ik heb via een schakelaartje de ingang naar massa gelegd.
Dus als de pic een "0" ontvangt op zijn ingang moet de pic hier iets mee doen.
Het werkt wel maar het probleem is dat de pic nogal traag reageert. Soms moet ik een seconde of twee blijven duwen voor een ledje begint te branden ofzo.
Heeft iemand hier een verklaring voor ?
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
chipje
Why do people spend money they don't have, to buy things they don't need, to impress people they don't like...? .-.-.-.-. Wie zich gelukkig voelt met het geluk van anderen, bezit een rijkdom zonder grenzen.
Hoe ziet je programma eruit?
Denk gewoon dat je programma meeste van de tijd in een delay lus hangt, of dat de schakelaars niet goed ontdenderd worden.
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
SYMBOL poort1 = PORTB.0
SYMBOL poort2 = PORTB.1
DIM teller AS BYTE
PORTB_PULLUPS ON
DELAYMS 500
CLEAR
CLS
WHILE 1 = 1
IF poort1 = 0 THEN INC teller
DELAYMS 50
IF poort2 = 0 THEN DEC teller
PRINT AT 1,1, "Parking A:", DEC3 teller
DELAYMS 50
WEND
Dit is men volledige voorlopig code, er moet nog veel bijgedaan worden maar voorlopig is dit het voor te testen. Het werkt wel maar de ingangen reageren traag.
[Bericht gewijzigd door Mathieuke op ]
T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
Op 4 maart 2006 22:18:19 schreef Mathieuke:
DEVICE 16F628A ;Gebruik een 16F628A type CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF SYMBOL poort1 = PORTB.0 SYMBOL poort2 = PORTB.1 DIM teller AS BYTE PORTB_PULLUPS ON DELAYMS 500 CLEAR CLS WHILE 1 = 1 IF poort1 = 0 THEN INC teller DELAYMS 50 IF poort2 = 0 THEN DEC teller PRINT AT 1,1, "Parking A:", DEC3 teller DELAYMS 50 WENDDit is men volledige voorlopig code, er moet nog veel bijgedaan worden maar voorlopig is dit het voor te testen. Het werkt wel maar de ingangen reageren traag.
Zit het probleem niet in die DELAY? in totaal wordt er 0,1 seconde gewacht ... en ik zie het nut er ook niet van in!!
T.Assies
Ik zie dingen die je nooit voor mogelijk hield. Ik maak ze mogelijk. Ik kan je pijn en lijden laten zien. In tegenslag vind ik hoop, in de verhalen die ik hoor inspiratie. Ik kan je veel vertellen. Wat ik doe? Ik ontdek. Mijn wereld is jouw wereld.
ja dat wel maar dat heeft op deze manier geeen zin. Je moet kijken of de knop ingedrukt is, wachten, en dan kijken of de knop NOG STEEDS ingedrukt is. indien ja -> actie
wat je nu doet is in principe alleen maar tijd verspilling..
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
Mathieuke:
Je moet goed kijken wat je programma doet.
Echt goed na gaan wat hier gebeurt want dit gaat niet goed werken.
Je maakt een oneindige lus met WHILE 1 = 1
Dat is ok.
Ik neem aan dat het de bedoeling is dat als je op poort1 drukt dat de teller op het display verhoogt en met poort2 verlaagt.
Maar wat gebeurt er als je bijvoorbeeld op poort1 drukt?
-De teller wordt verhoogt (het programma loopt meteen verder)
-Wacht 50mSec (nutteloos op deze manier)
-Negeert poort2 (want niet ingedrukt)
-Plaatst op het display de tellerstand
-Wacht weer 50mSec (nutteloos)
-Met WEND weer naar WHILE en alles begint opnieuw
Als je de toets ingedrukt houdt dan zal de teller elke 100mSec (50 + 50) verhoogt worden.
Je zult dus ook moeten bekijken wanneer de toets weer wordt losgelaten.
Beter is:
DEVICE 16F628A ;Gebruik een 16F628A type
CONFIG INTRC_OSC_NOCLKOUT, WDT_OFF, PWRTE_ON, LVP_OFF, MCLRE_OFF
SYMBOL poort1 = PORTB.0
SYMBOL poort2 = PORTB.1
DIM teller AS BYTE
PORTB_PULLUPS ON
DELAYMS 500
CLEAR
CLS
WHILE 1 = 1
WHILE PORTB & 3 = 3 : WEND ;Wacht op een toets
DELAYMS 5
IF poort1 = 0 THEN INC teller
IF poort2 = 0 THEN DEC teller
PRINT AT 1,1, "Parking A:", DEC3 teller
WHILE PORTB & 3 < 3 : WEND ;Wacht tot toets los is gelaten
DELAYMS 5
WEND
Helemaal volledig is dit nog niet maar dit zal wel werken.
Ik blijk het te snappen maar frits ik snap niet wat dat getal "3" daar doet ?
Heeft dat een speciale betekenis ?
Frits Kieftenbelt
Ohm sweet Ohm | www.picbasic.nl
3 is hetzelfde als %00000011
De laatste 2 bits zijn 1, de rest is 0.
Je werkt met PORTB.0 en B.1 (oftewel 00000011).
Hierdoor wordt alleen naar deze 2 poorten gekeken en hebben de andere 6 poorten geen invloed op de test.
(Ik had ook beter %00000011 in de code kunnen zetten, dat werkt namelijk ook (vergeet de % niet)).
Als je bijvoorbeeld ook PORTB.7 erbij wil testen dan moet je hier invullen:
WHILE PORTB & %10000011 = %10000011 : WEND ;Wacht op toets