mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik portb= porta


Autor: Mark Supper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich habe folgenden in bascom code geschrieben:
'----------------------
Config Portb = Output
Config Porta = Input

Do
Portb = Porta
Loop
'----------------------

an port b befinden sich leds - die sich auch ansteuern lassen und 
leuchten! leider passiert nichts wenn ich die pins von portA einzeln 
gegen masse ziehe. also muß es wohl am PORTA liegen! was mache ich 
falsch!

sorry bin ein anfänger!
danke

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn's ein AVR ist kannst Du so keine Pegel am PORTx lesen, das geht 
dann über PINx.
Reiner

Autor: Mark Supper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann ich dann due zustände am port a an port b ausgeben?

Autor: Reiner (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne bascom zwar nicht das alles was irgendwie wie BASIC klingt in 
mir Krämpfe verursacht, aber irgendwie wird es wohl
so ähnlich aussehen:

Do
Portb = Pina
Loop

Reiner


Wenn Du von PORTx liest, siehst Du nur was Du vorher mal in das 
Ausgangslatch geschrieben hast, nicht was Außen anliegt. Dafür gibt es 
das PINx Register.

Reiner

Autor: Mark Supper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Config Porta = Input
Config Portb = Output

Do
Portb = Pina
Loop
End

funktioniert nicht.....! grumml

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ne , ne so geht das nicht....
Wenn du zustände an porta einlesen und an portb ausgeben möchtest geht 
das folgendermaßen:
If Pina.0 = 1 then
set portb.0
else
reset portb.0
end if


Also liegt an port a Highpegel an,
wird b.0 auch auf High gesetzt,
andernfalls,ist pina.0 nicht high
wird auch portb.0 auf Low gesetzt.


Sven

Autor: Mark Supper (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wie kann ich das machen, dann ich z.b. alle zustände über nehmen kann 
oder zb wenn 0001 anliegt das gemacht wird und wenn 1010 anliegt was 
anderes gemacht wird! also praktisch programmausführung je nach dem was 
an pins 0-3 anliegt!
weil wenn ich mit if arbiten soll dann wird das elendlang!

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Portb = Pina müsste auf jeden Fall funktionieren. Ich vermute der Fehler 
liegt woanders, probier mal ob es in Assembler geht: 
http://www.mikrocontroller.net/sourcecode/tutorial...

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

also in assembler machst du so,

in   r16,pina
out  r16,portb

dann geht das was an B anligt gleich an A wieder raus.

Die Eingangszustände kannst du auf eine Sprungtabelle schicken, also du 
liest eine 0B00000001 vom Port nimmst die mal 2 (weil 16 Bit Adresse) 
und machst ICALL oder IJUMP auf Tabelle.

Mike

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Mark!

Momente mal. Du schreibst, Du ziehst die Eingänge an PortA nach Masse. 
Dazu brauchst Du ein Pull-Up (Widerstand an PortPins gegen +5V, etwa 10k 
bis 47k), entweder im AVR oder extern, sonst tut sich gar nix.

Das interne Pull-Up machst Du über das PortA-Register, das Du high 
setzt, während das DDRA-Register auf Eingang steht.

Ansonsten ist PortB=PinA schon richtig.

In Assembler etwa so:

ldi TEMP1,0x00
out DDRA,TEMP1  ;Port A => Eingang
ldi TEMP1,0xFF
out PORTA,TEMP1 ;Pull-Ups an
ldi TEMP1,0xFF
out DDRB,TEMP1  ;Port B => Ausgang
ldi TEMP1,0x00
out PORTB,TEMP1 ;Ausgänge low

main:
  in  TEMP1,PINA
  out PORTB,TEMP1
  rjmp main

In BASIC prinzipiell nicht anders, aber ich weiß nicht, wie dort die 
Ports angesprochen werden, Vielleicht so:

Config Portb = Output
Config Porta = Input
Porta = 0xFF           'Pull-Ups an

Do
  Pinb = Porta         'Ausgabe Port A auf Pin B
Loop

Ohne Pull-Ups solltest Du die LEDs flackern sehen, wenn Du mit dem 
Finger an den unbeschalteten Eingang gehst. Die Eingänge sind dann sehr 
hochohmig und die Brummspannung reicht aus, um sie anzusteuern.

Sven (aber ein anderer ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.