Arduino 644P: PA0 als digitaler Ausgang

Bei meinem eigens produzierten Board mit einem 644P habe ich blöderweise am PA0 eine LED angehägt.

PA0 -> Widerstand -> LED -> GND

Ich dachte, das ich den PA0 auch als digitalen Ausgang gebrauchen kann:

void setup() {
  pinMode(PA0, OUTPUT);
  digitalWrite(PA0, HIGH);
}

void loop() {
  digitalWrite(PA0, HIGH);
  digitalWrite(PA0, LOW);
}

Leider passiert da nichts. Was mache ich falsch? Grundsätzlich sollte das doch gehen oder nicht?

Danke und Gruss

stofarmi: Bei meinem eigens produzierten Board mit einem 644P habe ich blöderweise am PA0 eine LED angehägt.

PA0 -> Widerstand -> LED -> GND

Ich dachte, das ich den PA0 auch als digitalen Ausgang gebrauchen kann:

void setup() {
  pinMode(PA0, OUTPUT);
  digitalWrite(PA0, HIGH);
}

void loop() {  digitalWrite(PA0, HIGH);  digitalWrite(PA0, LOW); }




Leider passiert da nichts. Was mache ich falsch? Grundsätzlich sollte das doch gehen oder nicht?

Danke und Gruss

Hallo stofarmi,

PA0 ist der 1. analoge Eingang also A0, kann aber natürlich auch als digitaler Ein-/Ausgang (D31) verwendet werden. Ob das im Code mit PA0 tut, weiß ich nicht.

Versuche mal PA0 durch 31 zu ersetzen. Also:

void setup() {
  pinMode(31, OUTPUT);
  digitalWrite(31, HIGH);
}

void loop() {
  digitalWrite(31, HIGH);
  digitalWrite(31, LOW);
}

Blinkt aber ein wenig schnell. Da fehlt eine Verzögerung. Vermutlich war aber der Code nur als Beispiel gedacht, oder?

Gruß, Katsu

Danke für die Antwort.

Ja den Code habe ich falsch kopiert...

Der Code sieht so aus:

void setup() {
  pinMode(31, OUTPUT);
  digitalWrite(31, HIGH);
}

void loop() {
  digitalWrite(31, LOW);
  delay(1000);
  digitalWrite(31, HIGH);
  delay(1000);
}

Leider funktioniert das nicht... ich habe schon fast alle andern Nummern durchprobiert.

Welches Board hast Du in der IDE ausgewählt?
Wäre möglich das da noch was fehlt.

Du hast das Sanguino add-on für den 644p?

Ich habe das Board.txt selber geschrieben:

atmega644p.name= Custom ATmega644p (3.3V, 8 MHz)

atmega644p.upload.using= arduino:avrispmkII
atmega644p.upload.speed=57600
atmega644p.upload.protocol=avrispmkII
atmega644p.upload.maximum_size=63488
atmega644p.upload.tool=arduino:avrdude

atmega644p.bootloader.low_fuses=0xFF
atmega644p.bootloader.high_fuses=0xD9
atmega644p.bootloader.extended_fuses=0x05
atmega644p.bootloader.lock_bits=0x0F
atmega644p.bootloader.unlock_bits=0x3F
atmega644p.bootloader.tool=arduino:avrdude

atmega644p.build.mcu=atmega644p
atmega644p.build.board=CUSTOM_ATmega644P
atmega644p.build.core=arduino:arduino
atmega644p.build.variant=arduino:standard
atmega644p.build.f_cpu=8000000L

stofarmi: Ich habe das Board.txt selber geschrieben:

Und, welche pins_arduino.h wird verwendet? Das ist natürlich nicht ganz unwichtig, wenn die Arduino Pin Bezeichner verwendet werden sollen....

Mein Vorschlag:

// Programm Blink

void setup() 
{
  DDRA  |= _BV(PA0);  // pinMode(PA0, OUTPUT);
  PORTA |= _BV(PA0);  // digitalWrite(PA0, HIGH);
}

void loop() 
{
  PINA  =  _BV(PA0); // toggle Pin
  delay(500);
}

Peinlich: Das pins_arduino.h habe ich voll vergessen. Ich hatte vorher einen 328 in meinem Board und habe mit dem Standard gearbeitet. Beim 644p funktioniert das natürlich nicht mehr gleich.

Dann muss ich das File noch erstellen. :-(

Oder hat jemand eines für den 644p?

Danke für die Hilfe.

Sanguino Add-On müsste doch auch gehen? Da sollte alles drin sein. Da gibt es z.B. den 644p mit 8 MHz

Allerdings sind in der Board.txt die Werte ein wenig anders eingetragen. Die verwenden auch einen anderen Bootloader.

Kannst ja mal testen.

Um das Teil zu bekommen gibt es 2 Möglichkeiten: 1. Möglichkeit: Boardverwalter URL hinzufügen In der Arduino IDE auf Datei und dann auf Voreinstellungen gehen. Unten bei "Zusätzliche Boardverwalter-URLs folgendes hinzufügen: https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json Jetzt kann unter "Werkzeuge > Board > Boardverwalter" nach Sanguino gesucht und installiert werden. 2. Möglichkeit: Paket so runterladen und von Hand reinkopieren. Von https://github.com/Lauszus/Sanguino über klick auf "Clone or download" und danach auf "Download Zip" das Paket holen und entpacken. Darin gibt es dann auch die pins_arduino.h. Entweder diese verwenden oder das ganze Sanguino Verzeichnis in das Arduino/Hardware Verzeichnis kopieren. Dann kannst Du auch Deine Board.txt weiterverwenden wenn Du da die benötigten Dateien nimmst.

Gruß, Katsu

combie: Und, welche pins_arduino.h wird verwendet? Das ist natürlich nicht ganz unwichtig, wenn die Arduino Pin Bezeichner verwendet werden sollen....

Mein Vorschlag:

// Programm Blink

void setup() {   DDRA  |= _BV(PA0);  // pinMode(PA0, OUTPUT);   PORTA |= _BV(PA0);  // digitalWrite(PA0, HIGH); }

void loop() {   PINA  =  _BV(PA0); // toggle Pin   delay(500); }

Danke für deine Hilfe!!! Dein Code funktioniert erst einmal und zeigt mir, dass mein Board grunsätzlich funktioniert. Welch eine Erleichterung ;D

Jetzt muss ich wohl das pins_arduino.h erstellen/anpassen. Das vorgeschlagene File hat wohl einen Fehler so ich das sehe.

Gruss und 1000 Dank!