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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.