Forum: Mikrocontroller und Digitale Elektronik Platformio, Attiny24, falsches Pinmapping!?


von V. T. (rotermilan)


Lesenswert?

Hallo zusammen,
ich möchte über die Platformio-IDE einen Attini24 mit dem Arduino 
Blink-Sketch programmieren um die LED am PA0-Pin blinken zu lassen. Die 
Konpilierung und Programmierung funktioniert ohne Fehler, allerdings mit 
einer Warnung (Siehe unten) und ich glaube, da liegt der Hund begraben, 
denn die angegebene LED will nicht blinken!
1
#include <Arduino.h>
2
3
void setup()
4
{
5
  // initialize LED digital pin as an output.
6
  pinMode(PA0, OUTPUT);
7
}
8
9
void loop()
10
{
11
  // turn the LED on (HIGH is the voltage level)
12
  digitalWrite(PA0, HIGH);
13
  // wait for a second
14
  delay(1000);
15
  // turn the LED off by making the voltage LOW
16
  digitalWrite(PA0, LOW);
17
  // wait for a second
18
  delay(1000);
19
}
1
Platformio-ini:
2
[env:attiny24]
3
platform = atmelavr
4
board = attiny24
5
framework = arduino
6
; change MCU frequency
7
;board_build.f_cpu = 1000000L
8
9
upload_protocol = custom
10
upload_port = COM5
11
upload_speed = 19200
12
upload_flags =
13
    -C
14
    ; use "tool-avrdude-megaavr" for the atmelmegaavr platform
15
    $PROJECT_PACKAGES_DIR/tool-avrdude/avrdude.conf
16
    -p
17
    $BOARD_MCU
18
    -P
19
    $UPLOAD_PORT
20
    -b
21
    $UPLOAD_SPEED
22
    -c
23
    avrispv2
24
upload_command = avrdude $UPLOAD_FLAGS -U flash:w:$SOURCE:i

Bei der Kompilierung wird folgende Warnmeldung ausgegeben:
C:\users\xxx\.platformio\packages\framework-arduino-avr-attiny\variants\ 
tinyX4/pins_arduino.h:156:2:  warning: #warning "This is the 
COUNTERCLOCKWISE pin mapping - make sure you're using the pinout diagram 
with the pins in counter clockwise order" [-Wcpp]
 #warning "This is the COUNTERCLOCKWISE pin mapping - make sure you're 
using the pinout diagram with the pins in counter clockwise order"

Hier stecke ich gerade fest! Wie und wo kann ich eine "counter clockwise 
order" angeben?

Grüße RM

von Peter D. (peda)


Lesenswert?

Dazu müßte man mal in die pins_arduino.h, Zeile 156 schauen, was da 
steht.
Die Ardunio-Lib wird wohl mit den Standard-Macros des AVR-GCC nicht 
funktionieren. Die gehen nur für direkte IO-Zugriffe: "DDRA |= 1<<PA0".

von Veit D. (devil-elec)


Lesenswert?

Hallo,

mit Arduino werden alle Pins mit durchnummerierten Nummern angesprochen. 
Für jeden unterstützten Controller gibts Pinouts. Da mir die Ausschrift 
bekannt vorkommt, vermute ich du hast ein Package von Spencekonde der 
IDE hinzugefügt. Er hat vor langer Zeit einmal seine 
Pindurchnummerierung geändert. Seitdem lässt er das beim kompilieren als 
Hinweis mit anzeigen. Einstellen kann man das im Boardmenü, falls man 
das abweichend von default ändern möchte. Also wenn du das von 
Spencekonde verwendest ist hier alles beschrieben. 
https://github.com/SpenceKonde/ATTinyCore

von Achim M. (minifloat)



Lesenswert?

Veit D. schrieb:
> vermute ich du hast ein Package von Spencekonde der IDE hinzugefügt.

Ja sicher. Das ist aber nicht das Problem.
Da hat der nicht die Arduino-Pinnnummer, sondern die Pinnummern 
innerhalb des Ports verwendet:

V. T. schrieb:
> pinMode(PA0, OUTPUT);

Das Makro "PA0" ist eine 0. Blöd, dass das Makro "PB0" auch eine 0 ist.

Da Frage ich mich aber, warum man in der Lib nicht die Pinnummern der 
ICs selbst nimmt. Oder man macht es von vornherein wie von peda 
vorgeschlagen, aber da würde man sich ja mit der Hardware beschäftigen 
müssen.

mfg mf

: Bearbeitet durch User
von V.T. (Gast)


Lesenswert?

Hallo zusammen,

genau so ist es ;-). Das Problem lag an der falsch angegebenen 
Pin-Nummer.

Wenn ich die Makros aus: 
SpenceKonde/ATTinyCore/blob/139f872c6ccecef7b5fe6f7b3d81b8e6f00762a4/var 
iants/tinyX4/pins_arduino.h#L86-L98

Bsp. "PIN_A0" verwende, ist es auch egal, ob ich "counter clockwise
order" oder "clockwise" angegeben habe.

Diese Meldung wird immer ausgegeben.
#ifdef ARDUINO_MAIN
#warning "This is the COUNTERCLOCKWISE pin mapping - make sure you're 
using the pinout diagram with the pins in counter clockwise order"

Info zur Zählorder:
In der JSON-Datei zum Attiny24 ist die Variante angegeben "variant": 
"tinyX4":

    "build": {
      "core": "tiny",
      "extra_flags": "-DARDUINO_AVR_ATTINYX4",
      "f_cpu": "8000000L",
      "mcu": "attiny24",
      "variant": "tinyX4"
    },

im SpenceKonde/ATTinyCore gibt es noch die andere Variante, die man über 
die Platformio.ini auswählen kann:

board_build.variant = tinyX4_reverse

Dann hätte man das Pinmapping umgestellt. Ist aber nicht notwendig, wenn 
man oben beschriebenes Makro verwendet.

Kaum macht man's richtig, schon tuts :-)

Danke und schöne Grüße V.T.

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.