Hallo Miteinander,
wie ihr sicher wisst, gibt es eine Vielzahl von Tutorials, die
beschreiben, wie ein Arduino als ISP eingesetzt werden kann, um einen
AVR-Mikrocontroller zu programmieren. Da ich nur einen Arduino daheim
habe, aber 2 Raspi Picos, wollte ich nun einen der Raspberry Picos als
ISP-Programmer einsetzen. Leider finde ich dazu gar nichts im Netz.
Als Mikrocontroller verwende ich eine AtTiny45. Mein prinzipielle
Vorgehen ist wie in allen Tutorials beschrieben:
ArduinoISP auf Arduino (Uno) schreiben --> AtTiny mit Programmer
Arduisno as ISP programmieren.
Das habe ich ausprobiert und das funktioniert ohne Probleme.
Jetzt das Ganze mit dem Pico.
Hürde Nummer 1, Pico mit Arduino IDE programmieren. Dazu habe ich zwei
verschiedene Bibliotheken ausprobiert:
- Raspberry Pi Pico/RP2040 by Earle F.Philower --> Bibliothek 1
- Arduino Mbed OS RP2040 Boards by Arduino --> Bibliothek 2
Da ich mir nicht sicher war, ob in den Bibliotheken für den Pico die
Pins MISO,MOSI,SCK nach den Default eingestellt ist, habe ich am
Beispiel ArduinoISP folgende Änderungen gemacht:
1 | // The standard pin configuration.
|
2 | #ifndef ARDUINO_HOODLOADER2
|
3 |
|
4 | #define RESET 17 // Änderung 1
|
5 | #define LED_HB 9
|
6 | #define LED_ERR 8
|
7 | #define LED_PMODE 7
|
8 |
|
9 | // Uncomment following line to use the old Uno style wiring
|
10 | // (using pin 11, 12 and 13 instead of the SPI header) on Leonardo, Due...
|
11 |
|
12 | // #define USE_OLD_STYLE_WIRING
|
13 |
|
14 | #ifdef USE_OLD_STYLE_WIRING
|
15 |
|
16 | #define PIN_MOSI 19 // Änderung 2
|
17 | #define PIN_MISO 16 // Änderung 3
|
18 | #define PIN_SCK 18 // Änderung 4
|
19 | #endif
|
20 |
|
21 | // HOODLOADER2 means running sketches on the ATmega16U2 serial converter chips
|
22 | // on Uno or Mega boards. We must use pins that are broken out:
|
23 | #else
|
24 |
|
25 | #define RESET 17 // Änderung 5
|
26 | #define LED_HB 7
|
27 | #define LED_ERR 6
|
28 | #define LED_PMODE 5
|
29 |
|
30 | #endif
|
Verdrahtet habe ich folgendermaßen:
1 | Pico --> AtTiny45
|
2 | 21 (GP16) --> 6
|
3 | 22 (GP17) --> 1
|
4 | 24 (GP18) --> 7
|
5 | 25 (GP19) --> 5
|
Das Kompilieren des Programmes und das Hochladen auf den Pico
funktioniert unter Verwendung beider Bibliotheken.
Nun starten aber die Probleme. Jetzt möchte ich den AtTiny
programmieren. Ich wähle als Board den "AtTiny45" und als Programmer
"Arduino as ISP".
Bibliothek 1:
ich erhalte folgende Meldung nach dem Kompilieren:
1 | Der Sketch verwendet 684 Bytes (16%) des Programmspeicherplatzes. Das Maximum sind 4096 Bytes.
|
2 | Globale Variablen verwenden 9 Bytes (3%) des dynamischen Speichers, 247 Bytes für lokale Variablen verbleiben. Das Maximum sind 256 Bytes.
|
3 | C:\Users\USERNAME\scoop\apps\arduino\current\hardware\tools\avr/bin/avrdude -CC:\Users\USERNAME\scoop\apps\arduino\current\hardware\tools\avr/etc/avrdude.conf -v -pattiny45 -cstk500v1 -PCOM4 -b19200 -Uflash:w:C:\Users\USERNAME\AppData\Local\Temp\arduino_build_338475/Blink_tiny45.ino.hex:i
|
4 |
|
5 | avrdude: Version 6.3-20190619
|
6 | Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
|
7 | Copyright (c) 2007-2014 Joerg Wunsch
|
8 |
|
9 | System wide configuration file is "C:\Users\USERNAME\scoop\apps\arduino\current\hardware\tools\avr/etc/avrdude.conf"
|
10 |
|
11 | Using Port : COM4
|
12 | Using Programmer : stk500v1
|
13 | Overriding Baud Rate : 19200
|
14 | avrdude: stk500_recv(): programmer is not responding
|
15 | avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x03
|
16 | [...]
|
17 | avrdude: stk500_recv(): programmer is not responding
|
18 | avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x03
|
19 |
|
20 | avrdude done. Thank you.
|
21 |
|
22 | Problem uploading to board. See https://support.arduino.cc/hc/en-us/sections/360003198300 for suggestions.
|
Biblitohek 2:
(Interessant ist, dass der Pico hier nach Aufspielen des
ArduinoISP-Programms plötzlich ein anderen Port hat)
Folgender Output beim Aufspielen:
1 | Der Sketch verwendet 684 Bytes (16%) des Programmspeicherplatzes. Das Maximum sind 4096 Bytes.
|
2 | Globale Variablen verwenden 9 Bytes (3%) des dynamischen Speichers, 247 Bytes für lokale Variablen verbleiben. Das Maximum sind 256 Bytes.
|
3 | C:\Users\USERNAME\scoop\apps\arduino\current\portable\packages\arduino\tools\avrdude\6.3.0-arduino17/bin/avrdude -CC:\Users\Maxel\scoop\apps\arduino\current\portable\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf -v -pattiny45 -cstk500v1 -PCOM5 -b19200 -Uflash:w:C:\Users\USERNAME\AppData\Local\Temp\arduino_build_338475/Blink_tiny45.ino.hex:i
|
4 |
|
5 | avrdude: Version 6.3-20190619
|
6 | Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
|
7 | Copyright (c) 2007-2014 Joerg Wunsch
|
8 |
|
9 | System wide configuration file is "C:\Users\USERNAME\scoop\apps\arduino\current\portable\packages\arduino\tools\avrdude\6.3.0-arduino17/etc/avrdude.conf"
|
10 |
|
11 | Using Port : COM5
|
12 | Using Programmer : stk500v1
|
13 | Overriding Baud Rate : 19200
|
14 | (bis die Fehlermeldung kommt dauert es nun eine Weile)
|
15 | Beim Hochladen des Sketches ist ein Fehler aufgetreten
|
Leider bin ich (noch) nicht so tief in der Embedded Programmierung,
vorallem bei den Schnittstellen, drin, wie ich es mir wünschen würde.
Ist es überhaupt möglich, die Pico auch als ISP-Programmer zu nutzen?
Muss ich noch etwas mehr beachten, was beim Arduino nicht notwendig ist?
Ich wäre über einen Schubs in die richtige (oder irgendeine) Richtung
dankbar, um mich tiefer einzuarbeiten und um das Problem lösen zu
können.
Viele Grüße
Zaby