Mijn eerste tests met AVR (en bascom). Een simpel programmaatje met een attiny261, portb.0-portb.6 zijn ingangen voor schakelaars, porta.0-porta.6 zijn uitgangen die in functie van de ingangen leds aansturen.
De ingangen lees ik met debounce. De ingangen zijn druktoetsen naar de GND.
Pinb.7 (/reset) heb ik met een pullup aan de plus gelegd (daar zit geen druktoets op).
Aan het begin van mijn programma staat: portb=input en dan had ik eerst set portb. Ik dacht dat je hiermee de interne pullups activeerde. Nu bleek dat de processor toch allerlei ongewenste valse lezingen gaf, tot ik extern pullups van 12k aansloot. Toen werkte alles perfect.
Toen begon ik te denken dat het met die reset te maken zou kunnen hebben en ik maakt van die set portb het volgende: portb = &B01111111, en nu lijkt het wel te werken zonder externe pullups.
Klopt mijn redenering of is/was er iets anders aan de hand? Vooraleer ik alles van het experimenteerbord haal zou ik zeker willen zijn van de juistheid, vooral hardwarematig...
pros
Prosper, yop la boum, c'est le roi du macadam (aldus Maurice Chevalier)
Indien een pin als ingang geschakeld is, en je maakt de pin hoog, dan activeer je de interne pull-up weerstand. Je gedachtengang is bijgevolg OK.
klein is fijn
Moderator
set en reset werkt alleen met individuele pinnen, niet met een hele port.
portb = &B01111111 is de juiste manier.
Marcel
AVR C tutorial http://expand.xs4all.nl/avr
En als toevoeging: het setten of resetten van PB7 heeft geen effect zolang deze als RESET pin is geconfigureerd. Middels een fuse kan je hier een normale I/O pin van maken, maar dan werkt normaal ISP programmeren niet meer. Zolang PB7 een RESET pin is heeft deze intern al een geactiveerde pull-up.
Aah, dan was het probleem dus dat ik "set" gebruikte waar het niet kon/mocht. Ik dacht dat die syntaxchecker me daarover wel zou aanspreken maar niet dus 