Arduino ATMega328 Breadboard Pin Definitionen

Gast #5910900
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?
Gast #5910917
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);
Gast #5910939
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!
Gast #5910944
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() !
Gast #5911001
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?
Gast #5911006
Lesenswert?

Gast #5911058
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
Gast #5911079
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.
Gast #5911319
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.
Gast #5911329
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..

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren