Forum: Compiler & IDEs Signal über Ports leiten


von Toni (Gast)


Lesenswert?

Hallo

Wie kann ich elegant das Signal das z.B auf "Port B Pin 2" reinkommt
am "Port C Pin 3" wieder abgreifen.

Konfiguration als Ausgang/Eingang ist klar.

Wie aber sieht ein kurzer Code aus, der den Ein- mit dem Ausgangs-Pin
"verbindet" ?

Programmiersprache C (AVR-GCC)

Gruss
Toni

von Shazter (Gast)


Lesenswert?

Hi,

leider kann ich dir mit c nicht weiterhelfen, aber ich kann dir beim
Prinzip helfen.

Du legst die Serialen Daten die am Eingang ankommen in ein Array ab.
Danach brauchste nur noch die einzelnen Arrays an den Output ausgeben.


Mfg

Dirk

von Florian Pfanner (Gast)


Lesenswert?

es gibt mehrer Möglichkeiten.

1. Wenn der ganze Port gespiegelt werden soll:
PORTC = PINB;

2. Wenn du nur einen einzelnen PIN spiegeln willst:
PORTC &= (PINB&(1<<3));
hier von PINB.3 auf PORTC.3

3. Wenn du einen einzelnen PIN "quer" spiegeln willst:
if (PINB&(1<<3))
  PORTC |= (1<<4);
else
  PORTC &= ~(1<<4);
//hier von PINB.3 auf PORTC.4

Ich kann jetzt leider nicht garantieren, dass das ganze Funktioniert,
alles nur Theorie. Wenn nicht, dann melde dicht, und ich probiers mal
aus.

Gruß, Florian

von Toni (Gast)


Lesenswert?

Hallo Florian

Vielen Dank für die Beispielcodes.
Diese Bit-Operationen verstehe ich.

Gibt es aber keine Möglichkeit mit der Syntax "PINB.3 oder  PORTC.5"
direkt auf die Bit's zuzugreifen?

Existieren in AVR-GCC von Hause aus nicht solche Makros, wie das andere
Compiler anbieten ?

Gruss

Toni

von Minos (Gast)


Lesenswert?

das ist c standard und ganz normale bit operationen.
ich empfehle dir ein c-buch.

von Toni (Gast)


Lesenswert?

Hallo

Ja Minos, wenn das so einfach wäre !

C-Buch resp. C-Kurs ok , da hast Du recht.

Aber der Mikrokontroller hat dann aber schon noch so seine Eigenheiten,
wie eben das Ansprechen der Ports, der Verarbeitung der Interrupts, das
konfigurieren der Timer, ....
All das finde ich in keinem C-Buch !!

Ich sags noch einmal: Für all das wäre ein gut leserliches (auch für
einen Anfänger) Handbuch gefragt.

Sorry, Cracks

Toni

von Minos (Gast)


Lesenswert?

also ich  bin mir sicher das du mit einem C-Handbuch
und dem Datenblatt vom Controller sehr weit kommst.

von Toni (Gast)


Lesenswert?

OK Minos, ich verspreche Dir ich probiers!

Kannst Du mir aber trotzdem bestätigen, dass Florian's Syntax zum
Ansprechen der Port-Bits hinhaut?

Gruss

Toni

von Minos (Gast)


Lesenswert?

versprechen kann ich gar nix..:).

sieht aber gut aus der code.

von Toni (Gast)


Lesenswert?

Minos, es hat wirklich geklappt;es funktioniert !!!

Trotzdem, kannst Du mir sicher noch was mehr verraten:
Wo finde ich die Abmachung, wann ich mit PORTx.. oder dann eben mit
PINx.. codieren muss?
In meinem neuen C-Buch hab ich das nicht gefunden ;).


Gruss

Toni

von Florian Pfanner (Gast)


Lesenswert?

Das ist auch AVR-Spezifisch.

Wenn du irgenwas ausgeben willst, so musst du PORT benutzen. Wenn du
was einlesen willst, dann musst du PIN benutzen.

Das ist ein häufiger Anfängerfehler, dass zum lesen auf PORT benutzt
wird. Aber dann wird nur das Register und nicht der tatzäliche Zustand
gelesen.

Gruß, Florian

von Toni (Gast)


Lesenswert?

Lieber Florian

Vielen Dank für die Antwort, ich wills mir hinter die Ohren schreiben.

Hast Du Kenntnis, wo dieser Sachverhalt festgehalten ist.

Muss ich das nicht irgendwo im "Compiler-Handbuch" finden können?
Ich hab schon im "Reference Manual" gesucht, aber nichts gefunden!

Gruss

Toni

von Florian Pfanner (Gast)


Lesenswert?

Das steht im Datenblatt und in Bücher, die Speziell für den AVR
geschrieben wurden. Aber auch in verschiedenen Tutorials für den AVR.

Gruß, Florian

von Toni (Gast)


Lesenswert?

Danke Florian


Hast Du mir einen Link zu so was ?
Atmel Datenblätter hab ich, haben aber nicht C-spezifisches drinnen!

Gruss

Toni

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.