beste ,
ik heb een pic 16f84
op poort b heb ik 7 ingangen en 1 uitgang
op de uitgang (PORTB,0) moet de toestand vande bit getoggled worden ( dus van 1 naar 0 , en omgekeerd)
ik zit al een tijdje te zoeken maar er raak er niet wijs uit .
Stel dat mijn portb,0 hoog is , dan skipt hij naar de bcf...
Maar dan werkt de volgende instruktie me weer tegen.
Weet iemand een oplossing?
Mijn asm is :
btfss PORTB,0 ; als 1 is ,skippen
btfsc PORTB,0 ; als 0is skippen
bcf PORTB,0
bsf PORTB,0
zoiets:
btfss PORTB,0 ; als 1 is ,skippen
goto set;
goto clear;
clear:
bcf PORTB,0;
goto cont;
set:
bsf PORTB,0;
goto cont;
cont:
edit: kan vereenvoudigt worden:
btfss PORTB,0 ; als 1 is ,skippen
goto set;
clear:
bcf PORTB,0;
goto cont;
set:
bsf PORTB,0;
cont:
[Bericht gewijzigd door pol op ]
Als rb0 getoggeld word kan hij alleen 1 of 0 zijn dus hoef je maar naar 1 te kijken.
de ene status(1) sluit nl. automatisch de andere uit(0)
main call toggle
toggle btfss Rb0 ;is hij 1
goto notset ;nee hij was 0
goto set ; ja hij is 1
notset bsf RB0
return
set bcf RB0
return
OF
main call toggle
toggle btfsc Rb0 ;is hij 0
goto notset ;nee hij was 1
goto set ; ja hij is 0
notset bcf RB0
return
set bsf RB0
return
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
XOR. als je xort met 1 dan keert de bit om als je xort met nul dan niet
dus a = a xor 00100000b keert bit 6 om
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Dat is natuurlijk het beste anwtoord. Maar vergeet niet dat je geen read-modify-write operaties moet doen op een poort register, gebruik een shadow register!
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
dat spreekt vanzelf ! wat je terugleest van de poort is niet noodzakelijk wat je er op gezet hebt ...
Fuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
Headhunter, dat kan korter:
toggle btfss RB0 ;is hij 1?
goto set ;nee, hij was 0, dus zet bit
bcf RB0 ;ja, hij was 1, dus reset bit
return
set bsf RB0
return
Op 26 november 2005 18:22:11 schreef Fuzzbass:
Headhunter, dat kan korter:toggle btfss RB0 ;is hij 1? goto set ;nee, hij was 0, dus zet bit bcf RB0 ;ja, hij was 1, dus reset bit return set bsf RB0 return
thx , ik moest enkel het label 'set' veranderen , omdat mplab dat ziet als een instruktie
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 26 november 2005 16:23:05 schreef free_electron:
dat spreekt vanzelf ! wat je terugleest van de poort is niet noodzakelijk wat je er op gezet hebt ...
Zo te zien aan de laatste twee posts (btfss, bcf etc direct op RB0) luistert er niemand naar ons 
Op 26 november 2005 19:13:57 schreef Wouter van Ooijen:
[...]Zo te zien aan de laatste twee posts (btfss, bcf etc direct op RB0) luistert er niemand naar ons
het werkt nogthans hoor ...
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 26 november 2005 19:48:02 schreef Extragroot:
het werkt nogthans hoor ...
Ja, en ik ben laatst de straat overgestoken zonder links of rechts te kijken en ik leef nog steeds, dus dat kijken is nergens voor nodig.
Helaas hebben Wouter en Free-elektron gelijk.
XOR werkt ook en nog beter ook
en schrijven direct naar een poort het wil wel maar ik heb ook een schematje waarbij een led ook getoggeld word rechtstreeks op een poort en dat ding lijkt zich niets van enige timing aan te trekken puur omdat je een Read Modify Write uitvoert op een poort.Dat het nu werkt wil dus niet zeggen dat het altijd goed werkt.
Fuzzbass
Mijn echte naam: Joris | Mijn elektronica website: Fuzzcraft.com
Op 26 november 2005 19:13:57 schreef Wouter van Ooijen:
[...]Zo te zien aan de laatste twee posts (btfss, bcf etc direct op RB0) luistert er niemand naar ons
Een goed ontwerp van de hardware draagt erg veel bij aan het voorkomen van de read-modify-write BUG van picjes. Ja, ik vind het een bug, een uitgangspin zou zijn status uit de poortlatch terug moeten lezen, en niet van de pin, daar heb je nl helemaal niets aan.
In ieder geval, als je de poort niet noemenswaardig capacitief belast, of de volle source- of sink stroom trekt, dan is er niets aan de hand.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 26 november 2005 21:29:10 schreef Fuzzbass:
In ieder geval, als je de poort niet noemenswaardig capacitief belast, of de volle source- of sink stroom trekt, dan is er niets aan de hand.
Als de maanstand gunstig is en je op de juiste wijze met een haring zwaait (sorry, voor piclister only) onder het prevelen van de juiste bezweringen dan heb je er inderdaad geen last van. Maar voor muggles is het gebruik van een shadow register toch sterk aan te bevelen.
Vraag: weet jij welke source en sink stromen in deze gegarandeerd veilig zijn?
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 26 november 2005 21:29:10 schreef Fuzzbass:
[...]een uitgangspin zou zijn status uit de poortlatch terug moeten lezen, en niet van de pin, daar heb je nl helemaal niets aan.
das geen bug. das juist goed ! zo kan je 2 pinne van een poort gebruiken als input en de andere 6 als output. je weet wat er op je output staat , dus je kan zo je input terughalen door een paar domme AND / Or bewerkingen.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 26 november 2005 23:13:50 schreef Wouter van Ooijen:
[...]Als de maanstand gunstig is en je op de juiste wijze met een haring zwaait (sorry, voor piclister only) onder het prevelen van de juiste bezweringen dan heb je er inderdaad geen last van. Maar voor muggles is het gebruik van een shadow register toch sterk aan te bevelen.
Vraag: weet jij welke source en sink stromen in deze gegarandeerd veilig zijn?
denk niet dat de stroom een rol speelt. tzal eer de triggerlevels zijn van de ingang. waarschijnlijk zit er schmittrigger aan de ingang. als je teveel capacitief belast en je stijg/daaltijden zijn niet ok dan krijg je rare fenomen bij read modify write. tegen dat je aant schrijven bent is de stande veranderd...
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 27 november 2005 16:51:49 schreef free_electron:
denk niet dat de stroom een rol speelt. tzal eer de triggerlevels zijn van de ingang.
En je dacht dat de stroom geen invloed heeft op de spanning?
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
neenne , je begrijpt verkeerd. ik bedoel zolang je binne grenzen van de poort driver blijft natuurlijk. zolang je daar in het juiste kwadrant zit maakt het niks uit. eenmaal je erbuiten gaat krijg je vodden omdat je nooit snel genoeg de trigger levels haalt van de ingag. we sensen nog altijd spanning ... stroom is natuurlijk deoorzaak van de spanning.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
Op 27 november 2005 17:09:42 schreef free_electron:
neenne , je begrijpt verkeerd. ik bedoel zolang je binne grenzen van de poort driver blijft natuurlijk.
maar de maximale stroom die de poortdriver toestaat (nuttig om bv een LED lekker te laten branden) veroorzaakt een spanning die de ingangsversterker niet meer altijd 'goed' interpreteert.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
das bizar ... nu ja ,als je geen weerstand gebruikt zal de io spanning zakken naar de Vf van de led ( aagzien de current limiter in de chip zit ... dus dat kan de verklaring zijn.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> das bizar
das jouw mening. het is gewoon het gedrag volgens de datasheet.
> ... nu ja ,als je geen weerstand gebruikt zal de io spanning zakken naar de Vf van de led ( aagzien de current limiter in de chip zit
nee, er zit geen als zodanig bedoelde current limiter op de chip.
Op 27 november 2005 19:23:02 schreef Wouter van Ooijen:
nee, er zit geen als zodanig bedoelde current limiter op de chip.
En daarom is het dus gewoon fout om rechtstreeks een led aan te sluiten. Ik zorg gewoon dat de output niet te zwaar belast wordt en gebruik altijd bsf en bcf instructies.
Een kwart Watt weerstandje kan ook best ruim een halve Watt aan (als je hem tenminste niet beetpakt
maar dat is niet bevordelijk voor de levensduur.
Wouter van Ooijen
Wouter van Ooijen: VOTI webwinkel, docent HvU (Technische Informatica); C++ on mictrocontrollers blog
> En daarom is het dus gewoon fout om rechtstreeks een led aan te sluiten.
klopt
> Ik zorg gewoon dat de output niet te zwaar belast wordt en gebruik altijd bsf en bcf instructies.
Dat hangt af van wat je 'te zwaar' noemt. Als je de stroom trekt die volgens de spec toegestaan is, dan valt er genoeg spanning om bij het teruglezen een probleem te veroorzaken.
Maar ik vroeg al eens: weet jij hoeveel stromm je een pin kan laten sourcen danwel sinken om geen probeelm met een read-modify-write te krijgen?
Op 27 november 2005 21:15:22 schreef Wouter van Ooijen:
Maar ik vroeg al eens: weet jij hoeveel stromm je een pin kan laten sourcen danwel sinken om geen probeelm met een read-modify-write te krijgen?
Volgens de datasheet van een 628A:
Vol = 0.6 Volt bij Iol= 8.5 mA
Voh = VDD - 0.7 Volt bij Ioh = -3.0 mA
Dus bij bovengenoemde stromen zijn de logische niveaus dus wel gegarandeerd, ze noemen tot 0.8 V laag en boven 2.0 V hoog (bij VDD van 4.5 tot 5.5 V).
In de praktijk zal wel meer kunnen, maar dit kan dus volgens de datasheets.
free_electron
Silicon Member
Professioneel ElectronenTemmer - siliconvalleygarage.com - De voltooid verleden tijd van 'halfgeleider' is 'zand' ... US 8,032,693 / US 7,714,746 / US 7,355,303 / US 7,098,557 / US 6,762,632 / EP 1804159 - Real programmers write Hex into ROM
Op 27 november 2005 19:23:02 schreef Wouter van Ooijen:
> das bizardas jouw mening. het is gewoon het gedrag volgens de datasheet.
nee is mijn mening niet. PIC 's zijn bij mijn weten CMOS toch ? CMOS heeft inherent current sources aan de uitgang zitten ... ( wat niet wil zeggen dat ze niet kunnen kapot gaan bij kortsluitingen.. ze gedragen zich bij steeds kleinere belasing gedurende een tijd als current source tot ze uiteindelijk door interne dissipatie opbranden. )