Forum: Mikrocontroller und Digitale Elektronik Arduino ATMega328 Breadboard Pin Definitionen


von Heinz (Gast)


Lesenswert?

Hallo,

kurz zur Vorgeschichte:
ich habe ein selbst entwickeltes ATMega328 TQFP Board ohne ext. Quarz.

Um das unter Arduino 1.8.x zum Laufen zu bekommen, habe ich mir
den Bootldr breadboard-1-6-x.zip von der Arduino Webseite herunter
geladen und installiert. Der Prozessor läuft auch, fuses sind ok.
In der Trace Konsole kommen Ausgaben. Soweit so gut.

Problem:
Die Port Definitionen scheinen nicht zu stimmen:

void loop() {
  // put your main code here, to run repeatedly:
  delay(100);
  //Serial.println("An");
  digitalWrite(PC1,1);
  //PORTC |= 0x02;
  delay(100);
  //Serial.println("Aus");
  digitalWrite(PC1,0);
  //PORTC &= ~0x02;
}

Pin 24  wackelt nur, wenn ich die
im obigen Beispiel auskommentierten Zeilen aktiviere.
Es scheint, dass der bei digitalWrite übergebene Portname
unbekannt ist.

Frage:
Wie kann ich die korrekten Pin Definitionen aktivieren?

von Oliver S. (oliverso)


Lesenswert?

Die sind „aktiviert“. Was genau außer „wackeln“ erwartest du denn?

Oliver

von Sebastian R. (sebastian_r569)


Lesenswert?

Wird irgendwo das DDRC-Register gesetzt oder was in Richtung pinMode()?

von leo (Gast)


Lesenswert?

Heinz schrieb:
> Es scheint, dass der bei digitalWrite übergebene Portname
> unbekannt ist.

Ja, e.g. PC1 heisst A1 unter Arduino. Google mal nach "Arduino Pinout 
328". Gibt's fesche Bilder.

leo

von Einer K. (Gast)


Lesenswert?

Heinz schrieb:
> Wie kann ich die korrekten Pin Definitionen aktivieren?

Es wird die Pindefinition des UNO genutzt.
>atmega328bb.build.variant=arduino:standard
https://wwwhpag.staufer-gymnasium.de/fileadmin/images/Schule/AGs/RoboterAG/UnoPinout.png


> digitalWrite(PC1,1);
Das ist nicht logisch.

Du möchtest sowas:
digitalWrite(13,1); // spricht mit PB5

oder sowas:
PORTB |= _BV(PB5);

von Heinz (Gast)


Lesenswert?

>PC1 heisst A1 unter Arduino

Perfekt!
digitalWrite(A1,1);
funktioniert!

Was ich noch nicht verstehe:
In einem anderen Projekt mit Arduino Pro Mini Setup
greife ich auf
PD5,               //Port-Pin Output: SPI select
PD6,               //Port-Pin Output: Reset
PD7,               //Port-Pin Input:  Busy
PB0

zu und es funktioniert problemlos. Daher dachte ich, in diesem
neuen Projekt kann ich via "PC1" auf Pin24 zugreifen.
...aber das muss ich nicht jetzt verstehen :)

Danke nochmal für den Tip!

von Guggel (Gast)


Lesenswert?

> Perfekt!
> digitalWrite(A1,1);
> funktioniert!

Jeder kleine Pöpelkontroller kann das ohne das Gedöhns tausendmal 
schneller.
Aber die Dummen sind halt anspruchslos.

von Einer K. (Gast)


Lesenswert?

Heinz schrieb:
> Was ich noch nicht verstehe:
> In einem anderen Projekt mit Arduino Pro Mini Setup
> greife ich auf
> PD5,               //Port-Pin Output: SPI select
> PD6,               //Port-Pin Output: Reset
> PD7,               //Port-Pin Input:  Busy
> PB0

Das schaue dir noch mal genau an!

Das digitalWrite() arbeitet mit den Arduino Pinnummern.
Die Atmel Pinbezeichner sind hier falsch!

Kannst du auch verwenden, aber dann nur ohne digitalWrite() !

von leo (Gast)


Lesenswert?

Heinz schrieb:
> Was ich noch nicht verstehe:
> In einem anderen Projekt mit Arduino Pro Mini Setup

Ich wuerde Nummern verwenden, die Definitionen der Namen koennten auch 
fehlerhaft sein. Du hast die Pinbelegungen und die Sourcen - nutze das 
;-)

leo

von Heinz (Gast)


Lesenswert?

Arduino Fanboy D. schr
Ich habe das Gefühl, dass da etwas nicht richtig ist und mir
direkt auf die Füße fällt wenn ich denke, alles sei fertig.ieb im 
Beitrag #5910944:
> Die Atmel Pinbezeichner sind hier falsch!

hm ist mir noch unklar...

Bzgl. Port A hat mir leo ja weitergeholfen, aber bei Port
D muss ich wieder auf die PDs gehen:

Das hier geht:
pinMode(PD6, OUTPUT);

Das geht nicht:
pinMode(D6, OUTPUT);
Compiler Ausgabe: 'D6' was not declared in this scope

Warum kennt er A1..A5, aber nicht D6?
Wo stehen die Pin-Definitionen und wie wird in der Arduino
IDE die zum Board passende header Datei selektiert?

von leo (Gast)


Lesenswert?


von Einer K. (Gast)


Lesenswert?

Heinz schrieb:
> Wo stehen die Pin-Definitionen und wie wird in der Arduino
> IDE die zum Board passende header Datei selektiert?

Suche mal in deinem Arduino Ordner


arduino\hardware\arduino\avr\variants\standard\pins_arduino.h

pins_arduino.h Da findest du die Arduino Pin Nummern Definition




arduino\hardware\tools\avr\avr\include\avriom328p.h

iom328p.h Hier findest du die Atmel Port/Pin Definitionen

von max123 (Gast)


Lesenswert?

Hallo,

versuchs mal mit

  pinMode(LED_BUILTIN, OUTPUT);

 digitalWrite(LED_BUILTIN, LOW);

Steuert die LED, unabhängig welches Board.

(Natürlich mußt Du das Board auswählen und es muss unterstützt sein.

von Manfred (Gast)


Lesenswert?

Heinz schrieb:
> Wie kann ich die korrekten Pin Definitionen aktivieren?

Schaue Dir den Schaltplan eines Arduino-Nano an.

Der Vorteil der A*-Umgebung ist der, dass ich mich nicht um die 
tatsächlichen Ports oder Hardware des ATMega kümmern muß:

digitalWrite (7, LOW); setzt den Pin, der am Board mit D7 bezeichnet 
ist. Dass 7 zufällig PD7 ist, aber 8 dann PB0, muß ich nicht wissen.

irgendwas = analogRead (5); liest den Wert von PC5 ein, den selben Port 
kann ich mit z.B. digitalWrite (19, LOW); aber auch digital benutzen.

Nochmal: Arduino trennt den Anwender von der realen Hardware ab!

Deine Fragestellung lässt mich fast vermuten, dass Du mehr über den 
AT328 weisst als der klassische Arduino und vielleicht direkt auf eine 
professionellere Umgebung umschwenken solltest.

von Heinz (Gast)


Lesenswert?

Manfred schrieb:
> Arduino trennt den Anwender von der realen Hardware ab
>digitalWrite (7, LOW); setzt den Pin, der am Board mit D7 bezeichnet
>ist.

Das habe ich verstanden. Ich habe ein selbst entwickeltes Board, da
steht naturgemäß nicht dieselbe Pinbeschriftung drauf wie auf einem
Standard-Arduino Board:
https://github.com/tinytronix/homeautomation/tree/master/Hardware/LoraInwallShutter

Natürlich kann ich mir den Schaltplan eines Arduino-Nano ansehen.
Das wäre eine Lösung. Aber als Entwickler würde ich lieber die
entsprechende Header-Datei sehen und verstehen, wie die Arduino
IDE von A1 auf Pin24 des ATMega328 TQFP mappt.

Aber ich sehe auch ein, dass die Arduino-IDE genau diese Informationen
absichtlich vor dem Anwender versteckt. Vielleicht muss man damit leben, 
an gewisse Dokumentations-Grenzen zu stossen, wenn man es genauer wissen 
möchte.

von Einer K. (Gast)


Lesenswert?

Heinz schrieb:
> Aber ich sehe auch ein, dass die Arduino-IDE genau diese Informationen
> absichtlich vor dem Anwender versteckt. Vielleicht muss man damit leben,
> an gewisse Dokumentations-Grenzen zu stossen, wenn man es genauer wissen
> möchte.

Ich habe dir gezeigt wo diese Dateien auf deinem Rechner zu finden sind.

Da ist NICHTS geheim.
Du schaust nur nicht hin..

von Heinz (Gast)


Lesenswert?

Arduino Fanboy D. schrieb:
> Du schaust nur nicht hin..

Du hast recht. Habe deinen post eben erst "bewußt" wahrgenommen. Danke!

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.