Forum: Mikrocontroller und Digitale Elektronik ATtiny85 mit PlatformIO und dem STK500 als programer


von Sascha T. (sascha-sphw)


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

: Bearbeitet durch User
von Sascha T. (sascha-sphw)


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.

von Sascha T. (sascha-sphw)


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

von Sascha T. (sascha-sphw)



Lesenswert?

Lustig, wenn ich in der platformio.ini die F_CPU auf
1
board_build.f_cpu = 1000000UL

setze, scheint es zu gehen. Über das Studio zeigt er mir aber 8MHz siehe 
Anhang.

Würde mich freuen wenn mir das jemand erklären kann.

von Käse (Gast)


Lesenswert?

Sascha T. schrieb:
> Über das Studio zeigt er mir aber 8MHz siehe Anhang.

Was dir das Studuio anzeigt ist nicht die Taktfrequenz deines
Controllers sondern die Fuse-Einstellung zum Oszillator.

Einfach mal Datenblatt lesen (RTFM).

von Peter D. (peda)


Lesenswert?

Dann schau mal ins Datenblatt, was das Häkchen CKDIV8 bedeutet.

von Sascha T. (sascha-sphw)


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.

von Sascha T. (sascha-sphw)


Lesenswert?

Peter D. schrieb:
> Dann schau mal ins Datenblatt, was das Häkchen CKDIV8 bedeutet.

Jap, dann macht das natürlich Sinn warum es mit 1MHz richtig aussieht. 
:-D

Danke Dir!

von Käse (Gast)


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

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.