Forum: Mikrocontroller und Digitale Elektronik BASCOM AVR Bedeutung


von Kurt B. (kurt-b)


Lesenswert?

.

BASCOM AVR


PORTA.3 = Output
PINA.3 = OUTPUT

Ist das gleichwertig?


 Kurt

von Werner D. (Gast)


Lesenswert?

Nein

von Kurt B. (kurt-b)


Lesenswert?

Werner D. schrieb:
> Nein

OK, bin nämlich drauf reingefallen.
Das Ergebnis war dass er in einem UP den Ausgang toggelte anstatt in zu 
schalten.

Mit
 Reset PORTx.5
 WAITMs xx
 SET PORTx.5

geht's

Gehe ich richtig wenn ich annehme dass sich Portx immer auf Ausgabe
und
PINx immer auf Eingabe bezieht?


 Kurt

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kurt B. schrieb:
> Gehe ich richtig wenn ich annehme dass sich Portx immer auf Ausgabe
> und PINx immer auf Eingabe bezieht?

Antwort vom Sender Jerewan: „Im Prinzip ja, aber …“

Schreiben auf PINx hat in diesem Zusammenhang ja keine Bedeutung.
Daher hat man bei AVRs jüngerer Konstruktion (musst du im jeweiligen
Datenblatt nachlesen) diese Funktion überladen, indem man sie zum
Toggeln des entsprechenden Ausgangsbits benutzt.  Das hattest du ja
im Prinzip aber schon bemerkt. ;)

von Sigi (Gast)


Lesenswert?

Kurt B. schrieb:
> BASCOM AVR
>
> PORTA.3 = Output
> PINA.3 = OUTPUT

Welche Compiler Version versteht das?

> Ist das gleichwertig?

Wenn da jeweils ein Config vorsteht, ja.

von Kurt B. (kurt-b)


Lesenswert?

Jörg W. schrieb:
> Kurt B. schrieb:
>> Gehe ich richtig wenn ich annehme dass sich Portx immer auf Ausgabe
>> und PINx immer auf Eingabe bezieht?
>
> Antwort vom Sender Jerewan: „Im Prinzip ja, aber …“
>
> Schreiben auf PINx hat in diesem Zusammenhang ja keine Bedeutung.
> Daher hat man bei AVRs jüngerer Konstruktion (musst du im jeweiligen
> Datenblatt nachlesen) diese Funktion überladen, indem man sie zum
> Toggeln des entsprechenden Ausgangsbits benutzt.  Das hattest du ja
> im Prinzip aber schon bemerkt. ;)

Allerdings!

Es geht um den MEGA 2560 und dem Compiler 2.0.7.1


 Kurt

von Wolfgang S. (wsm)


Lesenswert?

PortA.3 = 1 (oder 0) ist ein Ausgabebefehl

bzw. A = PinA.3      ist ein Einlesebefehl

Mit Config PortA.3 = output / input wird die Datenrichtung festgelegt.

: Bearbeitet durch User
von Kurt B. (kurt-b)


Lesenswert?

Sigi schrieb:
> Kurt B. schrieb:
>> BASCOM AVR
>>
>> PORTA.3 = Output
>> PINA.3 = OUTPUT
>
> Welche Compiler Version versteht das?
>
>> Ist das gleichwertig?
>
> Wenn da jeweils ein Config vorsteht, ja.

Anscheinend doch nicht.

so gehts
------------------
 Config PORTA = Output
 Config PORTC = Output


 Config PORTE.4 = Output
 Config PORTE.5 = Output
 Config PINB.5 = Input

 Set PORTE.4
 Set PORTE.5
-------------------



so geht's nicht
-------------------
 Config PINE.4 = Output
 Config PINE.5 = Output
 Config PINB.5 = Input

 Set PINE.4
 Set PINE.5
-------------------

Ich gehe mal davon aus dass PORTx als Ausgang und PINx als Eingang 
sauber funktioniert.


 Kurt

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Kurt B. schrieb:
> Es geht um den MEGA 2560

Dürfte historisch der älteste AVR sein, bei dem dieses „Schreiben
auf PINx bewirkt ein Toggeln des Ausgangs“-Feature implementiert
worden war.

von Kurt B. (kurt-b)


Lesenswert?

.

 Config PINB.5 = Input
ist wohl auch nicht korrekt.

 Config PORTB.5 = Input
wäre dann logischer.


 Kurt

von Sigi (Gast)


Lesenswert?

Kurt B. schrieb:
>  Config PINB.5 = Input
> ist wohl auch nicht korrekt.
>
>  Config PORTB.5 = Input
> wäre dann logischer.

Beide Kommandos wirken auf das DDRB Register und löschen dort das Bit 5 
und machen den Portpin zu einem Input.

Klassisch wird über PINB der Zustand eines Input Portpins abgefragt.
Klassisch wird über PORTB der Zustand eine Outputs gesetzt.

Logisch wäre "Config PINB.5 = Input" und "Config PORTB.5 = Output" wenn 
man schon nicht DDRB als Parameter angeben kann.

Version 2.0.7.5 über Simulation getestet. Ich kann deine Probleme nicht 
nachvollziehen.

Schick mal ein komplettes kompilierbares Programm. Und was bedeutet: 
geht nicht???

von Alex D. (allu)


Lesenswert?

Kurt B. schrieb:
> Config PINB.5 = Input
> ist wohl auch nicht korrekt.
>
>  Config PORTB.5 = Input
> wäre dann logischer.

Der Compiler gibt halt die Schlüsselworte vor.

  Beispiel: Portpin Initialiserung Eingabe
  ---
'***  Port und Pin für den DCF77-Empfänger
Dcf_empfaenger Alias Pinb.1           'HIER DEN Port-IN-Pin EINTRAGEN
Config Dcf_empfaenger = Input

'***  Portpin einlesen
EineVariable = Dcf_empfaenger
  ---

  Beispiel: Portpin Initialiserung Ausgabe :

Live_led Alias Portb.1                  ' Live-Led
Config Live_led = Output

'***  Portpin steuern
Reset Live_led
 oder
Set Live_led
---
Alex

von Kurt B. (kurt-b)


Angehängte Dateien:

Lesenswert?

Sigi schrieb:
> Kurt B. schrieb:
>>  Config PINB.5 = Input
>> ist wohl auch nicht korrekt.
>>
>>  Config PORTB.5 = Input
>> wäre dann logischer.
>
> Beide Kommandos wirken auf das DDRB Register und löschen dort das Bit 5
> und machen den Portpin zu einem Input.

Könnte auch so sein dass die Pins im DDBR von Haus aus gelöscht sind.


> Klassisch wird über PINB der Zustand eines Input Portpins abgefragt.
> Klassisch wird über PORTB der Zustand eine Outputs gesetzt.

So hab ich das bisher auch immer verstanden, aber Naja.


> Logisch wäre "Config PINB.5 = Input" und "Config PORTB.5 = Output" wenn
> man schon nicht DDRB als Parameter angeben kann.
>
> Version 2.0.7.5 über Simulation getestet. Ich kann deine Probleme nicht
> nachvollziehen.
>
> Schick mal ein komplettes kompilierbares Programm. Und was bedeutet:
> geht nicht???

X1

 Kurt

von MWS (Gast)


Lesenswert?

Kurt B. schrieb:
> Könnte auch so sein dass die Pins im DDBR von Haus aus gelöscht sind.

Könnte nicht nur, ist auch so: außer bei einem Softreset durch Sprung 
auf Adresse 0 erhalten die verantwortlichen DDR-Register ihre Initial 
Value = 0 und damit sind sie Eingang. Später im Code kann alles anders 
sein, bereits ein Bootloader könnte einen Pin als Ausgang setzen, der 
auch solange Ausgang bleibt, bis das Hauptprogramm ihn gezielt ändert.

Config Pin/Port kann wiederverwendet werden und die Pins auf 
Eingang/Ausgang (re-)konfigurieren.

Warum schaust Du Dir nicht die Hilfe zu Bascom an?
Dort ist zu lesen, dass Pin und Port im Kontext mit Config 
gleichbedeutend sind. Ob Dir das gefällt, bzw. was Du davon hältst ist 
sekundär, es ist eben so, nimm die Version, die Dir besser gefällt.

Ohne diesen Config-Kontext bezeichnet Pin einen Eingang und Port einen 
Ausgang.

von Kurt B. (kurt-b)


Lesenswert?

MWS schrieb:
> Kurt B. schrieb:
>> Könnte auch so sein dass die Pins im DDBR von Haus aus gelöscht sind.
>
> Könnte nicht nur, ist auch so: außer bei einem Softreset durch Sprung
> auf Adresse 0 erhalten die verantwortlichen DDR-Register ihre Initial
> Value = 0 und damit sind sie Eingang. Später im Code kann alles anders
> sein, bereits ein Bootloader könnte einen Pin als Ausgang setzen, der
> auch solange Ausgang bleibt, bis das Hauptprogramm ihn gezielt ändert.
>

Ein Bootlader ist ja schon ein Programm.


> Ohne diesen Config-Kontext bezeichnet Pin einen Eingang und Port einen
> Ausgang.

Davon bin ich immer ausgegangen, hab mich durcheinanderbringen lassen 
bzw. war unsicher.

Danke euch für die Hilfen!

Das mit dem Toggeln (Jörg) war mir neu, sonst wäre das mit der 
"seltsamen" Ausgabe ja eh gleich klar gewesen.


 Kurt

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.