Frage zu Atmega8 Board/Programm

OP #4992462
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?????
Angehängte Dateien:
Gast #4992551
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
Gast #4992553
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
Gast #4992577
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
OP #4992587
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...
OP #4992594
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...
Gast #4992647
> 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.