ATtiny85 mit PlatformIO und dem STK500 als programer

OP #6476703
Lesenswert?

Hallo zusammen,

ich versuche gerade einen ATtiny85 mit PlatformIO über das STK500 zu 
programmieren. Dazu habe ich das Board wie folgt eingestellt.

https://www.robotroom.com/Atmel-ATtiny-STK500-Programming.html

Und meine platformio.ini wie in dem folgenden Link unter AVRISP.

https://docs.platformio.org/en/latest/platforms/atmelavr.html

Sie sieht nach meinen Anpassungen so aus
1
[env:attiny85]
2
platform = atmelavr
3
board = attiny85
4
;framework = arduino 
5
upload_protocol = custom
6
upload_speed = 19200
7
upload_port = COM5
8
upload_flags =
9
    -C
10
    "$PROJECT_PACKAGES_DIR/tool-avrdude/avrdude.conf"
11
    -p
12
    $BOARD_MCU
13
    -P
14
    $UPLOAD_PORT
15
    -b
16
    $UPLOAD_SPEED
17
    -c
18
    stk500v1
19
upload_command = avrdude $UPLOAD_FLAGS -U flash:w:$SOURCE:i

Angeschlossen ist das Board über einen USB to Serial Adapter. Der 
funktioniert, da ich mit dem Atmel Studio und mit der Arduino IDE über 
das STK500 bereits erfolgreich programmiert habe.

Den Port bekomme ich als COM5 im Gerätemanager angezeigt. Upload speed 
habe ich bereits 19200 und 115200 versucht. Ich habe es auch mit und 
ohne arduino framework versucht (die main.cpp habe ich dazu entsprechend 
angepasst). Hier würde ich auch gerne beide varianten verstehen und zum 
laufen bringen, also mit und ohne arduino framework.

Ich bekomme immer ein avrdude: stk500_recv(): programmer is not 
responding.

Was genau mache ich falsch, oder habe ich noch vergessen?

Das mit dem Bootloader habe ich ggf. auch noch nicht richtig verstanden, 
so wie ich das bisher aufgefasst habe, brauche ich den nur, wenn ich 
nicht mit einem ISP programmiere, ist das so richtig? Oder hat das ggf. 
etwas damit zu tun, dass es nicht klappt?

Danke
Sascha
OP #6477216
Lesenswert?

Mit folgender platform.ini konnte ich es ohne arduino framework zum 
laufen bringen.
1
[env:attiny85]
2
platform = atmelavr
3
board = attiny85
4
upload_protocol = stk500
5
upload_port = COM5
6
upload_flags =
7
    -P
8
    $UPLOAD_PORT

Hier habe ich aber jetzt ein anderes Problem und zwar, bei folgendem 
code, blinkt die LED 8s ON 8s OFF. Ich muss es ja nicht 100% genau 
haben, aber wenn aus 1s 8s werden, ist mir das etwas zu ungenau.
1
#include <avr/io.h>
2
#include <util/delay.h>
3

4
int main(void) {
5

6
    DDRB = 1 << PB0;
7

8
    while (1) {
9
        _delay_ms(1000);
10

11
        PORTB ^= 1 << PB0;
12
    }
13

14
    return 0;
15
}

Liegt das an meinem Setup, habe ich noch was vergessen? Ich habe auch
1
#define F_CPU 8000000UL

versucht, aber folgende Meldung erhalten.
src\main.cpp:1:0: warning: "F_CPU" redefined
 #define F_CPU 8000000UL

Somit scheint es nicht daran zu liegen.

Ggf. weiß hier jemand warum.
OP #6477270
Lesenswert?

So, mit framework = arduino geht es dann auch.

platformio.ini
1
[env:attiny85]
2
platform = atmelavr
3
board = attiny85
4
framework = arduino
5
upload_protocol = stk500
6
upload_port = COM5
7
upload_flags =
8
    -P
9
    $UPLOAD_PORT

main.cpp
1
#include <Arduino.h>
2

3
void setup() {
4
    pinMode(PB0, OUTPUT);
5
}
6

7
void loop() {
8
    digitalWrite(PB0, HIGH);
9
    delay(500);
10
    digitalWrite(PB0, LOW);
11
    delay(500);
12
}

Das Problem mit der Ungenauigkeit ist aber auch hier der Fall. Der Chip 
läuft auf 8Mhz intern auch ein
1
#ifdef F_CPU
2
#undef F_CPU
3
#define F_CPU 8000000UL
4
#endif

oder in der platformio.ini
1
board_build.f_cpu = 8000000UL

brachte keine Verbesserung der Genauigkeit.

Was könnte denn noch der Grund für diese Ungenauigkeit sein?

Würde mich sehr freuen wenn ich keinen Monolog führen müsste. :-D
OP #6477312
Lesenswert?

Vielleicht noch so eine blöde Frage, aber ich dachte der Oszillator ist 
für die Taktfrequenz verantwortlich. Wo kann ich denn mehr darüber 
nachlesen, wenn möglich nicht das Datenblatt, sondern etwas mehr auf 
Einsteiger abgestimmt? Ich finde das Datenblatt ist mit meinem aktuellen 
Kenntnisstand nicht immer ganz einfach zu verstehen.
Gast #6477326
Lesenswert?

Sascha T. schrieb:
> Vielleicht noch so eine blöde Frage, aber ich dachte der Oszillator ist
> für die Taktfrequenz verantwortlich.

Ist er auch. Aber was du anzeigst im Studio ist (ich sage es noch
einmal) nicht die Taktfrequenz sondern die Fuses-Einstellung damit
ein Oszillator richtig arbeiten kann/soll.

Die tatsächliche Taktfrequenz ergibt sich aus der Einstellung
interner/externer Oszillator und bei extern aus der Frequenz
des angeschlossenen Quarzes oder externen Oszillators.

Und nochmal: RTFM

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren