Bascom: Alias,Input,Output .....

dg2ygq

Neues Mitglied
23. Juli 2007
239
0
0
Bielefeld
Sprachen
So ganz bin ich da noch nicht ganz durchgestiegen!

Ich möchte die Pins von PortC am Mega16 verschieden zuweisen.

Pin 0, 1 und 2 sollen Ausgänge sein, Pin 3-7 Eingänge mit Pullup.

Wie gebe ich nun einen Alias für Pin0 (Output) an :

clk alias PinC.0
oder
clk alias PortC.0 ?

und bei Pin3 (Eingang)?
ptt alias Pinc.3
oder
ptt alias PortC.3?

Wie schalte ich den Pullup Pin3 ein?
PortC.3 = 1
Pinc.3 = 1
Hier geht doch schon der Alias?!
ptt = 1

Gehts auch mit set und clear?
Pinc.3 = set
oder
set Portc.3

Wenn ich jetzt Pin3 auslesen will:
If pinc.3 = 0 then bla blaaaaaa
oder
if portc.3 = 0 then bla blaaaaaaa


Port- und Pin bringt mich ständig durcheinander.
Gibts da ne simple Eselsbrücke ? :confused:

auch bei
DDRC = &B00001111
vertu ich mich grundsätzlich. ist die 1 nun Input oder Output?
Wie kann mir das am besten merken?
 
PIN, PORT und DDR

Hallo,

Port- und Pin bringt mich ständig durcheinander.
Gibts da ne simple Eselsbrücke ? :confused:

auch bei
DDRC = &B00001111
vertu ich mich grundsätzlich. ist die 1 nun Input oder Output?
Wie kann mir das am besten merken?
Ich kann nur aus Assembler-Sicht sprechen. Aber an diesem Punkt ist das
alles noch ähnlich.

PIN = Input (damit liest man das, was an den Anschlüssen anliegt)
PORT = Output (damit legt man was an die Anschlüsse oder setzt die Pullups)

Wenn der ATmega gerade startet (nach Reset) dann sind die Anschlüsse
alle auf Input, die Ein/Ausgabe-Register alle mit Nullen gefüllt und die Pullups
damit abgeschaltet.
Damit kann man sich dann merken :
- Null im DDR heißt Eingang
- Null im PORT heißt bei Eingang KEIN Pullup

Ich hoffe, die Eselsbrücken helfen dir weiter (Ihh Ahhh) :D :D

Gruß
Dino
 
Au ja,

Pin = Input
Port = Output

das ist gut !


Reset -> Eingang -> Null
Kann man sich eigentlich auch merken.

Super, danke dir!


Nun fehlt mir nur noch das Verständnis für Alias / Set usw.
 
Hallo Micha!


Thema ALIAS:
ALIAS ist nur eine Compilerdirektive mit der Du einfach einen Alias-Namen vergeben kannst. Wenn Du es z.B. Leid bist immer PORTD.1 usw. zu schreiben dann ist es zum Verständnis im Code oft leichter richtige Namen zu vergeben.
Du kannst mit "Licht Alias Portb.1" dem Compiler sagen, dass Du zukünftig nicht Portb.1 schreibst sondern Licht. Passieren tut da zunächst nix! Der Compiler geht beim Compilieren des Codes hin und ersetzt wie in einem Preprozessor-Lauf alle Alias-Names durch die richtigen Inhalte. Bedeutet, zu Compilezeit wird im Code aus Deinem "Licht" wieder "Portb.1" verstanden.

Somit hat das ganze natürlich Auswirkung auf SET, RESET usw. Aus "SET Licht" wird "SET Portb.1" und damit wird das Bit von Portb.1 gesetzt usw. ALIAS ist nur ein Hilfsmittel!!!


Thema SET:
Mit Set kannst Du Bits in Variablen oder bei Ports setzen. Reset macht das Bit zu 0 und mit dem Befehl Toggle schaltest Du immer das jeweilige Bit auf den jeweils anderen logische Zustand.


Thema PIN und PORT:Bzgl. PIN und PORT hat Dir Dino schon eine Antwort gegeben. So wie in Assembler so ist das in BASCOM auch.

Grundregeln:
Eingaben macht man mit PIN, Ausgaben mit PORT.
Möchtest Du also ein Bit von einem Eingang lesen so muss das mit z.B. PINA.x passieren. Ein ganzer Port wird einfach mit "Variable = PINA" gelesen.
Möchtest Du auf einem Ausgang etwas ausgeben so muss das mit PORTA.x passieren. Ein ganzer Port wird mit "PORTA = variable" beeinflusst.

Achtung:
Du kannst auch auf einem Eingang mit PORTA etwas ausgeben!! Das ist Trickreich da genau in diesem UseCase mit Ausgabe von 1 der PullUp aktiviert und mit 0 deaktiviert wird.
You know, für Eingänge kann ein PullUp wahlweise zu oder abgeschaltet werden.
Du kannst auch einen Input-Pin mit Port lesen. Als Rückgabewert bekommst Du aber nur den Inhalt des Latch. Der Latch-Inhalt wird durch beschreiben mit Port gesetzt. Bei Ausgängen ist dies der Inhalt den Du ausgeben möchtest. Bei Eingängen ist es die PullUp Konfiguration. Wenn Du also einen Eingang mit Port liest so wirst Du immer das gleiche Ergebnis bekommen, nämlich den Inhalt den Du zuvor dort reingeschrieben hast.

Startup:
Wird der Controller neu gestartet sind alle PIN's während des Reset 3State und hochohmig (glaube ich zumindest).
Nach dem Reset sind alle PIN's zunächst als hochohmige Eingänge geschaltet mit aktivem PullUp. (glaube ich zumindest)
Wenn Du nun also einen Input-Port mit PORT liest (siehe oben) dann solltest Du zunächst lauter 1er bekommen (glaube ich zumindest).


Du siehst, es wird nicht einfacher aber die regeln sind logisch!


So, jetzt fehlt noch die gesamte Konfiguration.

Konfiguration:
- Mit "Config Portd = Input" konfigurierst Du einen gesamten Port als Eingang.
- Mit "Config Portb = Output" konfigurierst Du einen gesamten Port als Ausgang.
- Einen einzelnen Pin konfigurierst Du mit "Config Pinc.6 = Output" als Ausgang
- Einen einzelnen Pin konfigurierst Du mit "Config Pinc.6 = Input" als Eingang. -- Auch hier ist ggf. der PullUp wieder zu berücksichtigen.

So, und wenn Du das noch mit ALIAS zusammen machst dann wird Dein Code auch richtig lesbar da Du dann zu jeder Zeit an jeder Stelle des Codes weißt, was hinter Portg.2 steckt. Solltest Du Dir aber einfallenlassen anstelle von "für sich selbst sprechenden" Alias-Namen nur Abkürzungen wie A und B und xyz zu verwenden, dann bleib lieber bei den HW-Ressourcen wie PORTF.4 :)


Ich hoffe es ist jetzt klarer geworden und nicht noch komplizierter, weil das ist es nicht! Ich hoffe ich konnte für Klarheit sorgen und nicht zur Verwirrung beitragen.

Grüße,
Markus
 
Bahhhhhhhhhhhhhhh....

Schaut euch das mal an :

Code:
Ptt alias PinC.3     ' Mic-Taste
Dlen alias PortC.0     ' Saa 13
Clb alias PortC.1        'Saa 14
Dat alias PortC.2      'Saa 12

Config Porta = Input  '8Bit SChalter
Porta = &B11111111  'Pullup für Schalter
Config Portb = Output  'Display, 10erStelle
Config Portd = Output  'Display, 1er Stelle

Config Dlen = Output
Config Clb = Output
Config Dat = Output
Config Ptt = Input
Ptt = 1  'Pullup für Taste

PortC : Pin 0 bis 2 sollen Output sein, Pin 3 Eingang mit Pullup.
Habe ich das so nun richtig gemacht? Bin mir Unsicher bei der Zuweisung von In-/Output , besonders bei PINC.3 :confused:
Würdet ihr (evtl wegen der Übersicht) "Alias" und "Config" dirket untereinander setzen?
 
Hi Micha,

habs überflogen und für gut befunden.
Habs durch den Compiler gejagt und er compiliert!

Sollte so funktionieren, hätte es zunächst auch nicht anders gemacht :)

Grüße,
Markus
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)