www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Basic ganzen PORT A als Ausgang bzw Eingang


Autor: Basic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi all, wollte mal ganz schnell wissen ob das hier so geht.
Wollte eigentlich in Basic, den ganzen Port A und C als Eingang 
definiert haben mit aktivierten Pullups an jedem Pin. und Die Ports B 
und D sollten einfach als Ausgänge definiert sein.
Jedoch spuckt Bascom nen Fehler aus und will nicht compilieren.
Kann man mit Basic alle Pins am Port direkt definieren oder muss ich 
ales einzen machen?

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portb = Output
Config Portd = Output
Config Pina = Input
Porta = 1
Config Pinc = Input
Portc = 1


Do
  If Pina.0 = 1 Then
    Portb.0 = 1
  End If
    If Pina.1 = 1 Then
    Portb.1 = 1
  End If
    If Pina.2 = 1 Then
    Portb.2 = 1
  End If
    If Pina.3 = 1 Then
    Portb.3 = 1
  End If
    If Pina.4 = 1 Then
    Portb.4 = 1
  End If
    If Pina.5 = 1 Then
    Portb.5 = 1
  End If
    If Pina.6 = 1 Then
    Portb.6 = 1
  End If
    If Pina.7 = 1 Then
    Portb.7 = 1
  End If
    If Pina. = 1 Then
    Portb. = 1
  End If
    If Pinc.7 = 1 Then
    Portd.0 = 1
  End If
      If Pinc.6 = 1 Then
    Portd.1 = 1
  End If
      If Pinc.5 = 1 Then
    Portd.2 = 1
  End If
      If Pinc.4 = 1 Then
    Portd.3 = 1
  End If
      If Pinc.3 = 1 Then
    Portd.4 = 1
  End If
      If Pinc.2 = 1 Then
    Portd.5 = 1
  End If
      If Pinc.1 = 1 Then
    Portd.6 = 1
  End If
      If Pinc.0 = 1 Then
    Portd.7 = 1
  End If

Loop


End

Autor: Rolf Im forum (for_ro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schreib es mal so:

Config Portb = Output
Config Portd = Output
Config Porta = Input
Porta = 255
Config Portc = Input
Portc = 255

Und lass das hier weg

Du kannst auch schreiben:

PORTB=PINA

    If Pina. = 1 Then
    Portb. = 1
  End If

Gruß

Rolf

Autor: Basic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi danke, eine frage noch.
was macht

"Portc = 255"

und wird hiermit:
PORTB=PINA

    If Pina. = 1 Then
    Portb. = 1
  End If
auch jeweils der gegenüberliegende Pin angesprochen?

Also das auch nur Pina.1 high bekommt und somit dann auch NUR Pinb.1 zum 
beispiel?

Autor: D. S. (jasmin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bitte schaue doch einfach in die Bascom-Hilfe.
Da steht alles haarklein und verständlich erklärt.

Oder sollen wir das für Dich tun ???

Autor: Basic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry das ich dich jetzt angepisst habe wegen 2 kleinen fragen. ich 
verkriech mich jetzt auch sofort in mein loch. trotzdem danke ich rolf 
und nicht dir du nichthelfer. und falls du mal jemals fragen hast dann 
schreib ein buch darüber und ein buch über die antworten.

solche leute wie dich verschmutzen nur thread wo ein anfänger fragen 
stellt.

sowas wie "benutz die SuFu, google, guck ins handbuch.." bla nervt.

es gibt schon gründe warum ich hier schreibe und nicht 10min irgendwo 
anders was lesen will.

Autor: D. S. (jasmin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lies doch einfach statt 10 Minuten zu schreiben ;-), dann hast Du mehr 
Zeit ins Handbuch zu schauen.
Es bringt Dich wirklich viel schneller weiter.
Und wenn Du dann mal wirkliche Probleme hast, hilft Dir hier gern jeder 
weiter; sofern er nicht gerade selber in Bücher schaut und lernt...

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> sowas wie "benutz die SuFu, google, guck ins handbuch.." bla nervt.

Die Tips sind aber gut gemeint und auch berechtigt.

> es gibt schon gründe warum ich hier schreibe und nicht 10min irgendwo
> anders was lesen will.

Nunja, wenn Du an der richtigen Stelle liest, erreicht Du mehr, als wenn 
Du andere Leute für Dich arbeiten lässt.

Nimm das Datenblatt Deines Controllers und schau Dir die 
Registerbeschreibung von PORTA, PINA_ und _DDRA genau an. Dann 
interessiere Dich mal für den Zusammenhang von Bits und Byte.

...

Autor: Rolf Im forum (for_ro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab mich beim Einfügen etwas vertan. Sollte eigentlich so heißen:

Und lass das hier weg

    If Pina. = 1 Then
    Portb. = 1
  End If

Du kannst auch schreiben:

PORTB=PINA

Wobei dass nicht gleich deinen If-Blöcken ist, aber wohl so wie du es 
willst.

  If Pina.0 = 1 Then
    Portb.0 = 1
  End If

Falls der Pina.0 einmal 1 ist, geht der Portb.0 nie wieder auf 0. Bei

PORTB=PINA

geht jeder PORTB.x sofort wieder auf 0, wenn der PINA.x auf 0 geht.
Das entsprechende für PINC und PORTD wäre dann
PORTD.0=PINC.7
PORTD.1=PINC.6
usw.
Das kannst du auch über eine Schleife erledigen.
Ein direktes Überkreuz-Setzen gibt es leider nicht.

Gruß

Rolf

Autor: Basic (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So hab es mal so versucht:
Bauplan laut Bild, wo ich Testweise nur eine LED angeschlossen habe. 
Anstatt einen Taster habe ich einen Fotosensor drangebaut, der wenn es 
dunkel ist einen sehr hohen Widerstand hat (ca. 5MOhm) und wenn man ihrn 
bestrahlt ca. 500 Ohm.

Ich habe im dunkeln den Fotosensor mit einer Taschenlampe bestrahlt 
jedoch hat dieser keine 1 geliefert und meine LED ging nicht an. Weis 
jemand wo der Fehler liegt?

So hoffe habe alles klar genug erklärt und hoffe das das mal keine 
anfänger frage ist.

$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 1000000

Config Portb = Output
Config Portd = Output
Config Pina.0 = Input
Config Pina.1 = Input
Config Pina.2 = Input
Config Pina.3 = Input
Config Pina.4 = Input
Config Pina.5 = Input
Config Pina.6 = Input
Config Pina.7 = Input
Porta.0 = 1
Porta.1 = 1
Porta.2 = 1
Porta.3 = 1
Porta.4 = 1
Porta.5 = 1
Porta.6 = 1
Porta.7 = 1
Config Pinc.0 = Input
Config Pinc.1 = Input
Config Pinc.2 = Input
Config Pinc.3 = Input
Config Pinc.4 = Input
Config Pinc.5 = Input
Config Pinc.6 = Input
Config Pinc.7 = Input
Portc.0 = 1
Portc.1 = 1
Portc.2 = 1
Portc.3 = 1
Portc.4 = 1
Portc.5 = 1
Portc.6 = 1
Portc.7 = 1

Do
  If Pina.0 = 1 Then
    Portb.0 = 1
  End If
    If Pina.1 = 1 Then
    Portb.1 = 1
  End If
    If Pina.2 = 1 Then
    Portb.2 = 1
  End If
    If Pina.3 = 1 Then
    Portb.3 = 1
  End If
    If Pina.4 = 1 Then
    Portb.4 = 1
  End If
    If Pina.5 = 1 Then
    Portb.5 = 1
  End If
    If Pina.6 = 1 Then
    Portb.6 = 1
  End If
    If Pina.7 = 1 Then
    Portb.7 = 1
  End If
    If Pina. = 1 Then
    Portb. = 1
  End If
    If Pinc.7 = 1 Then
    Portd.0 = 1
  End If
      If Pinc.6 = 1 Then
    Portd.1 = 1
  End If
      If Pinc.5 = 1 Then
    Portd.2 = 1
  End If
      If Pinc.4 = 1 Then
    Portd.3 = 1
  End If
      If Pinc.3 = 1 Then
    Portd.4 = 1
  End If
      If Pinc.2 = 1 Then
    Portd.5 = 1
  End If
      If Pinc.1 = 1 Then
    Portd.6 = 1
  End If
      If Pinc.0 = 1 Then
    Portd.7 = 1
  End If

Loop


End

Autor: Hannes Lux (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schmeiß die verdammten Configs über Bord und benutze die I/O-Register 
gemäß Datenblatt. Anders begreifst Du die Zusammenhänge nie...

...

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Config-Anweisungen machen das Programm ziemlich unübersichtlich, 
aber es geht auch anders:

Du kannst die Register auch direkt beschreiben:
DDRA=&B00000000
PORTA=&B11111111
Das bedeutet: Im DDR-Register stellt eine Null den Port auf Eingang und
im Port-Register schaltet eine Eins den Ziehwiderstand (Neudeutsch:
Pull-up) ein.
Diese beiden Zeilen haben jetzt also den gesamten Port A als Eingang
konfiguriert und alle Pull-up-Widerstände zugeschaltet.

MfG Paul

Autor: Basic (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok werde es mal morgen probieren

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.