Forum: Mikrocontroller und Digitale Elektronik Raspberry Pico als ISP


von Max-Martin K. (zaby1990)


Lesenswert?

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

von STOP PUTIN (Gast)


Lesenswert?

Welchen COM Port bekommt denn der Pico zugewiesen, wenn dort Serial() 
benutzt wird? Du könntest ja erstmal ein kleines Testprogamm übertragen 
und im Gerätemanager gucken oder was deine IDE sagt.
Das muss natürlich zusammenpassen. Genauso wie die GPIO Spannungen von 
ISP (Pico) und target (ATtiny)..

von Max-Martin K. (zaby1990)


Lesenswert?

STOP PUTIN schrieb:
> Welchen COM Port bekommt denn der Pico zugewiesen, wenn dort Serial()
> benutzt wird? Du könntest ja erstmal ein kleines Testprogamm übertragen
> und im Gerätemanager gucken oder was deine IDE sagt.

Ich nutze erst Com4 zum Übertragen des ISP-Programms. Bei Bibliothek 1 
bleibt der Com-Port danach gleich, bei Bibliothek ändert sich dieser zu 
Com 5. Die IDE entdeckt dort auch jeweils den Pico. Ich werde mal 
schauen, ob ich mit einem kleinen Serial-Programm mit dem Pico 
kommunizieren kann, aber ich gehe stark davon aus. (Dauert leider ein 
klein wenig, bin in der Woche stark eingebunden)

> Genauso wie die GPIO Spannungen von ISP (Pico) und target (ATtiny)..

Der AtTiny kann auch mit 3.3V arbeiten. Das Blink-Programm, dass ich auf 
diesen mit dem Arduino übertragen habe, läuft problemlos an, sobald er 
die 3.3V hat.

von Max-Martin K. (zaby1990)


Lesenswert?

STOP PUTIN schrieb:
> Du könntest ja erstmal ein kleines Testprogamm übertragen
> und im Gerätemanager gucken oder was deine IDE sagt.

Habe folgendes Testprogramm ausprobiert (dabei das ArduinoISP-Skript auf 
alles eingedampft, was keinen Bezug zu Serial hat):
1
#include "Arduino.h"
2
#undef SERIAL
3
4
#ifdef SERIAL_PORT_USBVIRTUAL
5
  #define SERIAL SERIAL_PORT_USBVIRTUAL
6
#else
7
  #define SERIAL Serial
8
#endif
9
10
// Configure the baud rate:
11
12
#define BAUDRATE  19200
13
14
void setup() {
15
  SERIAL.begin(BAUDRATE);
16
}
17
18
int incomingByte;
19
void loop(void) 
20
{
21
  if (SERIAL.available() > 0) {
22
    // read the incoming byte:
23
    incomingByte = SERIAL.read();
24
25
    // say what you got:
26
    SERIAL.print("I received: ");
27
    SERIAL.println(incomingByte, DEC);
28
  }
29
}

Läuft problemlos. Aber auch hier ändert sich der COM-Port des Picos beim 
Aufspielen unter Verwendung der Bibliothek 2. Aber wenn ich den Pico in 
der IDE dann auf dem neuen Port auswähle, habe ich Zugriff. Also denke 
ich, ich kann ein Kommunikationsproblem zwichen Pico und Rechner 
ausschließen.

von Cartman (Gast)


Lesenswert?

Wenn dir die Zwei Fuffzich fuer einen USBASP zu ville sind,
dann wirf den ganzen Krempel einfach aus dem Fenster.
Oder bring den Schrott selber zum laufen und belaestige nicht
die Welt damit.

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.