Forum: Mikrocontroller und Digitale Elektronik AS 6 mit STK500 programmieren "Error ID 0x11"


von David S. (tischler)


Angehängte Dateien:

Lesenswert?

Hallo liebe Gemeinde,

ich mache gerade meine ersten Schritte mit AS6, dem STK500 und C.

Habe eine Kleinigkeit geschrieben und wollte es zum Atmel8 schieben - 
darauf erhalte ich die untere Fehlermeldung.
Leider finde ich im Netz nichts zu "Error ID 0x11" - habt ihr eine 
Ahnung?
1
/*
2
 * Project1.c
3
 *
4
 * Created: 14.09.2013 00:26:55
5
 *  Author: Tischler
6
 */ 
7
8
9
#include <avr/io.h>
10
11
int main(void)
12
{
13
void painta();  // forward declaration
14
void paintb();
15
void paintc();
16
void paintd();
17
void painte();
18
void paintf();
19
20
DDRB  = 0b11111111;
21
DDRD  = 0b00000000;
22
PORTD = 0b11111111;
23
24
  while(1)
25
  {
26
    // Fuehre Aktion aus, wenn Bit Nr. 0 in PIND low (gedrueckt) ist
27
    if ( PIND & (0<<PIND0) )
28
    {
29
      painta();
30
    }
31
    
32
      if ( PIND & (0<<PIND1) )
33
    {
34
      paintb();
35
    }
36
37
    if ( PIND & (0<<PIND2) )
38
    {
39
      paintc();
40
    }
41
42
    if ( PIND & (0<<PIND3) )
43
    {
44
      paintd();
45
    }
46
47
    if ( PIND & (0<<PIND4) )
48
    {
49
      painte();
50
    }
51
52
    if ( PIND & (0<<PIND5) )
53
    {
54
      paintf();
55
    }  
56
    
57
  main();
58
  }
59
return 0;
60
}
61
  
62
void painta(void)
63
{
64
  PORTB = 0b11111111;
65
  main();
66
}
67
  
68
void paintb(void)
69
{
70
  PORTB = 0b00000000;
71
  main();
72
}
73
  
74
void paintc(void)
75
{
76
  PORTB = 0b11111111;
77
  main();
78
}
79
  
80
void paintd(void)
81
{
82
  PORTB = 0b00000000;
83
  main();
84
}
85
  
86
void painte(void)
87
{
88
  PORTB = 0b11111111;
89
  main();
90
}
91
  
92
void paintf(void)
93
{
94
  PORTB = 0b00000000;
95
  main();
96
}

von isnah (Gast)


Lesenswert?

Warum muss es immer Atmel-studio sein? Für die Kombination STK500 mit 
ATmega8 wurde das AVR-Studio "erfunden" und das funktioniert garantiert.

von STK500-Besitzer (Gast)


Lesenswert?

David Schwandt schrieb:
> darauf erhalte ich die untere Fehlermeldung.

Wann erhälst du die Fehlermeldung?
Hast du das STK500 als Programmer richtig eingestellt.
AS6 ist etwas "blöd"...

isnah schrieb:
> Warum muss es immer Atmel-studio sein? Für die Kombination STK500
> mit
> ATmega8 wurde das AVR-Studio "erfunden" und das funktioniert garantiert.

Nur weil mal mit dem AtmelStudio auch noch ARMe, XMegas etc. 
programmieren kann, muss es nicht das falsche sein...

von katastrophenheonz (Gast)


Lesenswert?

Hi,
Und wenn du die Probleme mit dem Programme gelöst hast, wirst du 
feststellen, dass dein Programm nicht funktioniert. Zum einen wegen der 
Aufrufe von main(), die dort nicht hingehören. Guck dir mal eines der 
zahlreichen  vorhandenen minimalprogamme zum LED-Blinken an, und wie 
dort Schleifen und funktionsaufrufe verwendet werden. C-Buch von vorn 
nach hinten durcharbeiten könnte auch helfen. Zum anderen sind deine 
Bit-abfragen falsch. Guckst du hier

http://www.mikrocontroller.net/articles/Bitmanipulation

wie man einzelne Bits abfragt und setzt.

Gruß, Heinz

von David S. (tischler)


Lesenswert?

STK500-Besitzer schrieb:
> Wann erhälst du die Fehlermeldung?
> Hast du das STK500 als Programmer richtig eingestellt.
> AS6 ist etwas "blöd"...

Die Meldung kommt, wenn ich den Atmega programmieren möchte bzw. auf den 
grünen Pfeil "Debuggen" klicke. Er fängt an zu programmieren, man siehts 
an den LED's, aber schließt nicht ab.
Das STK500 ist eigentlich richtig konfiguriert, ich habe bereits 
programmieren können. Auch FUSE Abfragen etc. läuft. Es werden mir auch 
keine Errors und keine Warnings in der Error List. Unter Output sagt er 
mir:
1
An error occured while executing command with ID 0x11. Timed out waiting for a response.
2
67 characters was discarded waiting for response start stoken. Protocol state at time of
3
timeout was 'Get Sequence Number'.


katastrophenheonz schrieb:
> Und wenn du die Probleme mit dem Programme gelöst hast, wirst du
> feststellen, dass dein Programm nicht funktioniert. Zum einen wegen der
> Aufrufe von main(), die dort nicht hingehören. Guck dir mal eines der
> zahlreichen  vorhandenen minimalprogamme zum LED-Blinken an, und wie
> dort Schleifen und funktionsaufrufe verwendet werden. C-Buch von vorn
> nach hinten durcharbeiten könnte auch helfen. Zum anderen sind deine
> Bit-abfragen falsch. Guckst du hier

Das sind meine ersten Anfänge. Einen Main-Programmablauf habe ich schon 
hinbekommen, nun probiere ich mich beim Aufbau von Unterprogrammen.
Die Bit-Abfragen habe ich so aus einem Tutorial entnommen - wie wäre es 
denn richtig?

Danke an alle!

von Georg G. (df2au)


Lesenswert?

David Schwandt schrieb:
> Die Meldung kommt, wenn ich den Atmega programmieren möchte bzw. auf den
> grünen Pfeil "Debuggen" klicke.

Willst du programmieren oder debuggen? Das ist schon ein Unterschied.

Und wirf alle main() Aufrufe raus. Die sind tödlich. Das Unterprogramm 
kehrt am Ende immer dahin zurück, wo es her gekommen ist.

von katastrophenheinz (Gast)


Lesenswert?

>Die Bit-Abfragen habe ich so aus einem Tutorial entnommen
Dann sollte man den Tutorial-Schreiber wg. Desinformation mal die 
Leviten lesen.

>Wie wäre es denn richtig?
Steht ausführlich unter obigem Link.
Grundsätzlich geht das so, daß du dir das gesuchte Bit rausmaskierst, 
indem du alle anderen auf 0 setzt und dann guckst, ob das 
übriggebliebene 0 oder nicht 0 ist, z.B. für Bit2 aus deinem Beispiel
if ( ( PIND & 1<<PD2 ) != 0 ) // Wenn Bit2 gesetzt
oder
if ( ( PIND & 1<<PD2 ) == 0 ) // Wenn Bit2 nicht gesetzt

1<<PD2 ist gleichbedeutend zu 0b00000100, da PD2 in io.h mit 2 definiert 
ist. Durch das bitweise UND (&) zwischen PIND und 0b00000100 wird also 
erreicht, im 8bit-Ergebnis des bitwise-& alle Bits bis auf Bit2 
garantiert 0 sind, und Bit2 des Ergebnis ist identisch zu Bit2 aus PIND. 
Und dieses 8bit-Ergebnis kannst du jetzt einfach mit gleich/oder 
ungleich 0 auswerten.

Das Ganze kann man auch für mehr als ein Bit durchführen, dann musst du 
natürlich statt gleich/ungleich 0 auf das konkrete Bit prüfen, Beispiel:
if ( PIND & ( 1 << PD2 | 1 << PD3 ) == 1 << PD3 ) // Nur Bit3 gesetzt?

Gruss, Heinz

von katastrophenheinz (Gast)


Lesenswert?

.. und überleg mal, warum ein Ausdruck der Form

0 << n

eigentlich sinnlos ist, und zwar für alle möglichen Werte von n.

von David S. (tischler)


Lesenswert?

Ok - es liegt nicht am Code... ich kann selbst...
1
#include <avr/io.h>
2
3
int main (void) {
4
  while(1) {
5
  }
6
  return 0;
7
}

... nicht programmieren... Komisch, lade ich ein Programm geschrieben 
mit Assembler, läuft alles einwandfrei.
Kann ein µC, wenn er das erste mal mit Assembler programmiert worden 
ist, danach nicht mit C programmiert werden oder was ist hier los :D

von Georg G. (df2au)


Lesenswert?

nochmals die Frage: Kann es sein, dass du programmieren und debuggen 
verwechselst?

von David S. (tischler)


Lesenswert?

Georg G. schrieb:
> nochmals die Frage: Kann es sein, dass du programmieren und debuggen
> verwechselst?

Nun, eigentlich nicht - die Bezeichnung des "Play-Knopfes" lautet zwar 
"Start Debugging (F5)", jedoch wird der µC programmiert oder auch 
programmiert. Unter Assembler funktioniert es schließlich auch...

von Georg G. (df2au)


Lesenswert?

Der Chip wird mittels eines .HEX (oder .ELF) Files programmiert. Diesem 
File sieht man nicht an, ob es per Assembler oder C oder Basic erzeugt 
wurde.

Du versuchst ein C Programm zu debuggen und das kann deine 
Entwicklungsumgebung nicht ohne weitere Hilfen.

von spess53 (Gast)


Lesenswert?

Hi

>Nun, eigentlich nicht - die Bezeichnung des "Play-Knopfes" lautet zwar
>"Start Debugging (F5)", jedoch wird der µC programmiert oder auch
>programmiert. Unter Assembler funktioniert es schließlich auch...

Aber nur wenn ein Debugger vorhanden ist. Und das STK500 ist kein 
Dedugger.

MfG Spess

von David S. (tischler)


Lesenswert?

Also ich muss sagen, da ich weder C noch Assembler kann, und mir das 
daher frei war, welche Sprache ich neu erlerne, und außerdem mit 
Assembler alles funktioniert - habe ich einfach meine Idee in Assembler 
niedergeschrieben.
Hier mache ich auch nichts anderes als auf den Pfeil bzw. F5 zu klicken 
/ drücken, er checkt daraufhin den Code auf Fehler (und spuckt mir dies 
aus bevor er programmiert) und programmiert daraufhin den µC.

von Georg G. (df2au)


Lesenswert?

David Schwandt schrieb:
> Hier mache ich auch nichts anderes als auf den Pfeil bzw. F5 zu klicken
> / drücken

Es wäre hilfreich, wenn du wüsstest, was du tust und was für einen 
Erfolg Voraussetzung ist. F5 ist "RUN" und bedeutet, dass das Programm 
im Debugger laufen soll. Du hast keinen Debugger, du hast einen 
Programmieradapter. Also gibt es einen Fehler.

F7 erzeugt dir ein aktuelles HEX File und zeigt dir dabei ggfs die 
Fehler in deinem Programmtext. Wenn alles bis hier hin fehlerfrei ist, 
geht es mit "Tools", "Connect Programmer" dann weiter.

von David S. (tischler)


Lesenswert?

Georg G. schrieb:
> F5 ist "RUN" und bedeutet, dass das Programm
> im Debugger laufen soll. Du hast keinen Debugger, du hast einen
> Programmieradapter. Also gibt es einen Fehler.

Nur, dass das selbe Spielchen in der Assembler-Sprache (selbes Programm, 
keine anderen Einstellungen etc.), durch drücken von F5 programmiert 
wird. Warum auch immer.

von Spess53 (Gast)


Lesenswert?

Hi

>Nur, dass das selbe Spielchen in der Assembler-Sprache (selbes Programm,
>keine anderen Einstellungen etc.), durch drücken von F5 programmiert
>wird. Warum auch immer.

Und was hast du als Debugger eingestellt? Das STK500 kann weder JTAG 
noch DW. Und das sind die Schnittstellen über die bei F5 das Programm in 
den Controller geschoben wird. Bei einem STK500 kannst du nur den 
Simulator benutzen. Und der programmiert keinen AVR. Der 
Fortschrittsbalken der bei F5 erscheint hat nichts mit programmieren zu 
tun.

MfG Spess

von Georg G. (df2au)


Lesenswert?

David Schwandt schrieb:
> Nur, dass das selbe Spielchen in der Assembler-Sprache (selbes Programm,
> keine anderen Einstellungen etc.), durch drücken von F5 programmiert
> wird. Warum auch immer.

Weil bei Assembler der eingebaute Simulator als Debugger dient. Für C 
ist nichts eingebaut, da muss DU liefern.

von BeJiZi (Gast)


Lesenswert?

Hallo,
Weiss nicht, ob Du das Problem schon gelöst hast oder nicht ... aber ich 
hatte das selbe Problem und bin auf diesen Thread gestossen, der 
eigentlich nicht viel geholfen hat. Bei mir war die Ursache des Fehlers 
ein falscher ISP clock bzw. war der ISP Clock am STK500 anders 
eingestellt als im Project.

In Tools->Device Programming->Interface Settings
und Projekt
Tool -> ISP Clock

muss die gleiche Frequenz eingestellt sein.

Dann war bei mir der Fehler behoben.

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.