Forum: Mikrocontroller und Digitale Elektronik Tiny12 PortB Eingang geht nicht


von Jürgen G. (Gast)


Lesenswert?

Hallo zusammen,

ich mach jetzt schon 3h rum und bekomme das nicht hin:
Die Led an Portb PB4 soll leuchten wenn der Taster an Portb PB0
gedrückt wird.
In der Simulation (AVR Studio4) gehts einwandfrei.


;Led auf PortB Bit4 ausgeben wenn Port PB0 =0
;Led leuchtet wenn bit4=0; Pb0=0 wenn Taster gedrückt

 .nolist
 .include "tn12def.inc"
 .list

loop:
ldi r16, 0b00010000 ;Datenrichtung einstellen, PB4 als Ausgang,
                    ;PB0 als Eingang
out ddrb, r16

ldi R17, 0b00010000
out portb, r17    ;Led aussschalten

sbic portb,0    ;Tastenabfrage, wenn Bit0=0 (=gedrückt)
                        ;dann übersrpinge
rjmp loop

ldi R17, 0b00000000
out portb, r17    ;Led ein

Was überseh ich da?
Das ganz mach auf ich auf dem STK500.
Der Taster (0V/5V) kommt am IC (Pin5) an.
Ebenso kann ich die Led mit einem anderen Programm zum blinken
bewegen.
Die Led  leuchtet dauernd.
Das heisst ja, daß das Bit0 "Null" ist.
Aber es müsste doch eine "1" sein!
(ist der Taster nicht gedrückt, erscheint an Pin5 5Volt)
Hat das was mit den internen "Pull-ups" zu tun?

Danke mal schon im voraus, ein blutiger Anfänger ;-)

von Marc (Gast)


Lesenswert?

Du hast erstens keine Endschleife also fängt dein Programm immer wieder
von vorne an. Somit wird die LED immer ausgeschaltet, bis der Schalter
gedrückt wird dann müsste sie kurz angehen und sofort wieder ausgehen.
Und zweitens würde ich in der Loopschleife nicht immer die
datenrichtung festlegen, sie ändert sich doch nciht also musst des ja
nur einmal machen und des nicht in die Schleife rein tun.

MFG Marc

von Henning (Gast)


Lesenswert?

bei der Tastenabfrage PinB statt PortB !

von Jürgen G. (Gast)


Lesenswert?

Hallo Henning,

hab ich mittlerweile auch gemerkt :-(
Trotzdem Danke! :-)
Blöderweise steht das NIRGENDS drin - auch nicht in DER Avr Bibel
ärger

Grüße Jürgen

von Henning (Gast)


Lesenswert?

in meinem buch "AVR-RISC Mikrocontroller" ist das, wie ich finde,
super erklärt. das ist zwar sau teuer, aber für mich hat sich der
kaufpreis gelohnt. "böse zungen" (bewertungen) bei amazon.de
behaupten es sei zwar nur die abschriften/überetzungen der
datenblätter, was sich auch nicht ganz von der hand weisen lässt, aber
alleine hätte ich mich nicht so schnell zurecht gefunden.

das buch bezieht sich allerdings nur auf die "basic line"

zur pin/port/ddr-geschichte müsste man allerdings auch was im
entsprechenden datenblatt finden

von elomt (Gast)


Lesenswert?

Hi

Vielleicht kann mir hier auch einer weiter helfen.
Bei meinem Tiny kann ich nur an einem Port etwas einlesen wenn ich 
direkt das Register von PINB ( 0x16 ) eingebe.

...
in r20,pinb   ( erliest nichts ein r20 bleibt auf 00 )
...

...
in r20,0x16   ( erliest wie gewolt den Port ein )
...

In den Programm test vom AVR Studio klappt es aber auch mit pinb.

in der INCLUDE Datei steht aber drin das 0x16 = PINB sein soll.
Was mache ich falsch?

von Hannes L. (hannes)


Lesenswert?

elomt wrote:
> Hi
>
> Vielleicht kann mir hier auch einer weiter helfen.
> Bei meinem Tiny kann ich nur an einem Port etwas einlesen wenn ich
> direkt das Register von PINB ( 0x16 ) eingebe.
>
> ...
> in r20,pinb   ( erliest nichts ein r20 bleibt auf 00 )
> ...
>
> ...
> in r20,0x16   ( erliest wie gewolt den Port ein )
> ...
>
> In den Programm test vom AVR Studio klappt es aber auch mit pinb.
>
> in der INCLUDE Datei steht aber drin das 0x16 = PINB sein soll.
> Was mache ich falsch?

In der Simulation geht es, in der Realität nicht? - Dann vermute ich 
mal, dass Du keinen PullUp eingesetzt (oder eingeschaltet) hast und der 
Eingangspegel immer Low ist.

...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.