ATtiny85 mit PlatformIO und dem STK500 als programer

OP #6476703
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
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
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
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
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

Eine eigene Frage? Dieser Thread ist über 5 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.