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?
Die sind „aktiviert“. Was genau außer „wackeln“ erwartest du denn? Oliver
Wird irgendwo das DDRC-Register gesetzt oder was in Richtung pinMode()?
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
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);
>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!
> Perfekt! > digitalWrite(A1,1); > funktioniert! Jeder kleine Pöpelkontroller kann das ohne das Gedöhns tausendmal schneller. Aber die Dummen sind halt anspruchslos.
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() !
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
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?
Heinz schrieb: > Bzgl. Port A hat mir leo ja weitergeholfen, Das ist nicht Port A sondern Arduino Pin A1 (aka 13). Noch mal, schau dir doch einfach mal die Pinbelegungen an, e.g. https://www.google.com/search?q=arduino+pin+328&client=ubuntu&hs=GKE&channel=fs&tbm=isch&source=iu&ictx=1&fir=I7R3Ipu-BJzKtM%253A%252C08_IK2TU2IOmsM%252C_&vet=1&usg=AI4_-kToKkY7UBaVtraIcf2X-MJy5bvoZg&sa=X&ved=2ahUKEwjSiIH95LzjAhVSOhoKHeshDRkQ9QEwBHoECAYQDA#imgrc=I7R3Ipu-BJzKtM: leo
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
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.
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.
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.
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..
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.