Forum: Mikrocontroller und Digitale Elektronik Frage zu Atmega8 Board/Programm


von O. A. (sokrates1989)


Angehängte Dateien:

Lesenswert?

Ich habe gerade ein Programm geschrieben, bei dem ich

mit Taster 1 ---> Led rot einschalte
Taster 2     ---> Led gelb einschalte
Poti         ---> Led grün einschalte


Wenn ich alle Eingänge und Ausgänge Auf den Port B lege.

Leuchtet keine der Leds.

also die Taster auf B.0 bis B.2 und die Leds auf B.3 bis B.5


Wenn ich aber die Taster wie zuvor, aber die Leds auf Port C lege

C.0 bis C.3

dann funktioniert mein Programm.

Warum funktioniert es nicht wenn ich alles mit Port B machen möchte?????

von Einer K. (Gast)


Lesenswert?

Meine Glaskugel sagt:
Weil du die Pullups wieder abschaltest!

von O. A. (sokrates1989)


Lesenswert?

Arduino F. schrieb:
> Meine Glaskugel sagt:
> Weil du die Pullups wieder abschaltest!


Sorry aber wie müsste ich es dann machen???
Und was heißt "wieder"
bezüglich der Pullups wurde doch nichts verändert..

Ich würde mich freuen wenn du noch es etwas konkreter sagst.

von Einer K. (Gast)


Lesenswert?

Ich habe keine Lust deine Bilder abzuschreiben.
Das darfst du nicht erwarten!


Tipp 1:
Wenn die Outputs auf 3,4,5 liegen, dann solltest du diese Bits, in der 
Schleife, auch setzen, und nicht 0,1,2

Tipp 2:
Wenn du das PortB Register mit 0 beschreibst, werden die Pullups, welche 
du vorher so schön aktiviert hast, sofort wieder abgeschaltet

von Stefan F. (Gast)


Lesenswert?

Nächstes mal bitte den Quelltext bereitstellen, nicht Screenshots. Jetzt 
muss ich nämlich mühsam abschreiben. Du hast Glück dass ich gerade Zeit 
und Lust dafür habe.

Hier schaltest du die Pull-Up Widerstände ein:

SBI PORTB,1
SBI PORTB,0
SBI PORTB,2

Und hier überschreibst du Dir das, so dass immer nur ein einzige Eingang 
einen Pull-Up Widerstand hat.

ldi r16,0x0000001 ; oder
ldi r16,0x0000010 ; oder
ldi r16,0x0000100
out PORTB,r16

Du änderst hier die falschen Bits. Deine Ausgänge sind Bit 3, 4 und 5 
außerdem solltest du die Pull-Ups an allen drei Eingängen eingeschaltet 
lassen. Also so:

ldi r16,0x0001111 ; oder
ldi r16,0x0010111 ; oder
ldi r16,0x0100111
out PORTB,r16

von c-hater (Gast)


Lesenswert?

Stefan U. schrieb:

> Nächstes mal bitte den Quelltext bereitstellen, nicht Screenshots.

Das wäre das Mindeste, was man verlangen kann...

> Hier schaltest du die Pull-Up Widerstände ein:
[...]

Und wenn man dann noch ein paar sinnvolle Symbole verwendet, wird die 
Sache irgendwann sogar richtig lesbar.

Also irgendwie sowas in der Art:

.equ Tast1Bit = PORTB0
.equ Tast1Msk = 1<<Tast1Bit
.equ Tast2Bit = PORTB1
.equ Tast2Msk = 1<<Tast2Bit
.equ PotiBit  = PORTB2
.equ PotiMsk  = 1<<PotiBit
;.equ Pullups  = Tast1Msk | Tast2Msk | PotiMsk
;warum muß eigentlich der Poti-Eingang einen Pullup kriegen? Braucht er 
;nicht! Also sinnvoller:
.equ Pullups  = Tast1Msk | Tast2Msk

.equ RotMsk   = 1<<PORTB3
.equ GelbMsk  = 1<<PORTB4
.equ GruenMsk = 1<<PORTB5
.equ Outputs  = RotMsk | GelbMask | GruenMsk

;Stack initialisieren kann man sich schenken, in dem Mini-Programm 
gibt's
;ja weder Interrupts noch Unterprogramm-Aufrufe...

  ldi R16,Pullups
  out PORTB,R16
  ldi R16,Outputs
  out DDRB,R16

main:
  ldi R16,Pullups
  sbis PINB,Tast1Bit
  sbr R16,RotMsk
  sbis PINB,Tast2Bit
  sbr R16,GelbMsk
  sbis PINB,PotiBit
  sbr R16,GruenMsk

  out PORTB,R16
  rjmp main

von O. A. (sokrates1989)


Lesenswert?

c-hater schrieb:
> Stefan U. schrieb:
>
>> Nächstes mal bitte den Quelltext bereitstellen, nicht Screenshots.
>
> Das wäre das Mindeste, was man verlangen kann...
>

ok. wie kann ich das machen? einfach den Code hier ins Textfeld 
einfügen?


> ;warum muß eigentlich der Poti-Eingang einen Pullup kriegen? Braucht er
> ;nicht! Also sinnvoller:

das ist das 2 te Programm dass ich gemacht habe. Daher habe ich abolut 
keine Ahnung ...von dem was ich da tue...

: )

Ich lerne noch...

von O. A. (sokrates1989)


Lesenswert?

Stefan U. schrieb:
Also so:
>
> ldi r16,0x0001111 ; oder
> ldi r16,0x0010111 ; oder
> ldi r16,0x0100111
> out PORTB,r16

DANKE! Ich habe es verstanden.
Eine Frage noch...warum funktionierte es dann trotzdem, als ich über den 
PortC programmiert hatte??? Denn die Pullups sind ja in beiden Versionen 
ausgeschaltet gewesen......

HAT SICH ERLEDIGT...Es sind dann ja in C die andere Positionen...

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

> einfach den Code hier ins Textfeld einfügen?

Lies die Hilfe, die direkt über dem Text-Editor verlinkt ist:
https://www.mikrocontroller.net/articles/Formatierung_im_Forum

> warum funktionierte es dann trotzdem, als ich über den
> PortC programmiert hatte???

Weil Port C ein anderer Port ist. Da kannst du hinschreiben, was immer 
du willst, ohne dass es deine Eingänge auf Port B beinflusst.

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.