www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik programmieren funktioniert nicht


Autor: Matthias Biri (Firma: home) (biri)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo leute...

ich bin noch relativ neu unterwegs mit µC und dadurch kann meine frage 
womöglich peinlich erscheinen....
ich binn gerade dabei das ich mir eine garagentoorsteuerung baue und 
will das ganze von einem µC steuern....
ich habe, nur um zu sehen ob das programmieren funktioniert folgendes 
programm eingegeben:
#include <avr/io.h>


void main(void)
{
  volatile uint16_t i;
  volatile uint16_t ii;
  
  //PORT C Output;
  DDRC = 0xFF;
  
  PORTC = 0xff;  // Port C BitMuster 1111 1111
  
  while(1)
  {
     
    for(ii=0; ii<4; ii++)
    {
      for(i=0;i<40000;i++);
    }
   
    PORTC =~ PORTC; // Port C invertieren
  } 

}
und bekomm dabei folgenden fehler herraus:
> "make.exe" program
avrdude -p atmega16 -P avrdoper -c stk500v2     -U flash:w:code_basic.hex 

avrdude: stk500v2_command(): command failed
avrdude: stk500v2_command(): command failed
avrdude: stk500v2_program_enable(): cannot get connection status
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.


avrdude done.  Thank you.

make.exe: *** [program] Error 1

> Process Exit Code: 2
> Time Taken: 00:01

tja nun hab ich mir die frage gestellt wo wohl der fehler liegt, am µC 
an meinem programm oder an was anderem...^^
würd mich freuen wenn ihr mir troz meiner unglaublichen unwissenheit 
weiterhelfen könnt!!

Autor: G4s7 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Prinzipiell sieht es nicht so aus, als würde es eher an der Verbindung 
zum µC liegen und nicht am Code.
Wenn du deine Verbindung nochmal überprüft hast du es geht solltest du 
aber zum probieren mal den Code aus dem AVR-GCC-Tutorial nutzen und 
das Delay nicht durch solche Schleifen machen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
    for(ii=0; ii<4; ii++)
    {
      for(i=0;i<40000;i++);
    }
Das wirft ein halbwegs gescheiter Compiler einfach raus. Weil dort rein 
gar nichts passiert.

> Double check connections and try again
Welche Hardware und welche Software verwendest du?

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>        Double check connections and try again

Damit solltest Du mal anfangen (Finger weg vom '-F'!). Ist der µC neu? 
Dann ist er wahrscheinlich zu langsam (bzw. der Prommer zu schnell), 
hier hilft ein '-B 10' für den avrdude.

Falls es dann noch immer nicht geht kann man weiter sehen.

HTH

Autor: blablub (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Das wirft ein halbwegs gescheiter Compiler einfach raus. Weil dort rein
> gar nichts passiert.

Aber nur wenn du entsprechende Performance-Optimizations angibst. Falls 
du das nicht tust und der Compiler das raushaut, ist der Compiler nicht 
nutzenswert. Überhaupt sollten Compiler sowas nur auf dem aggresivsten 
Level weg optimieren.

Fehlermeldung sieht wohl danach aus, dass keine Verbindung zum 
Programmer aufgenommen werden kann. Ist wohl eine Fehleinstellung vom 
avrdude. Welchen Programmer nutzt der OP?

Autor: Matthias Biri (Firma: home) (biri)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oke also:
programm verwende ich winAVR-programmersnotepad
der programmer is im anhang und ich hab euch den schaltplan meiner 
schaltung auch gleich dazu gegeben....

ich weiß nicht obs ein neuer µC ist den hat mir mein lehrer 
geschenkt...also nehm ichs mal an

Autor: Matthias Biri (Firma: home) (biri)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
tschuldigung hab ich ein bischen zu früh abgeschickt...!! ^^

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du RESET angeschlossen (an den ISP-Header)? Im Schaltplan ists 
ebendort zwar benannt, die verbindende Linie fehlt aber.

> ich weiß nicht obs ein neuer µC ist den hat mir mein lehrer
> geschenkt...also nehm ichs mal an

..da würde ich eher vom Gegenteil ausgehen.. :-)

Autor: Matthias Biri (Firma: home) (biri)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja der reset is abgeschlossen....
(ist wie w-lan die verbindung ist da aber man siehts nicht...kleiner 
scherz)

ja nun steh ich hald wieder vor dem problem was soll ich machen...??

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OT:
> sollten Compiler sowas nur auf dem aggresivsten Level weg optimieren.
Neinein, sowas sollte überhaupt nicht programmiert werden, denn es ist 
in keinster Weise portabel, denn in einem C-Programm ist kein Zeitbezug 
dargestellt. Mir wäre es am liebsten, wenn jeder meiner Befehle mit 
einem Zeitaufwand von 0 ausgeführt werden würde. Und damit wird 
natürlich auf meinem optimalen Rechner auch das Zählen auf 3000000000 
mit 0 Zeitaufwand ausgeführt. Es ist nirgends festgelegt, dass eine 
leere Zähleschleife eine Dauer hätte. Es funktioniert nur, wenn man den 
Compiler dazu zwingt.

Wenn ich eine Zeit will, dann schreibe ich das explizit hin (z.B. mit 
einer dementsprechend lautenden Funktion oder einem Timer).

Wenn man neu anfängt, sollte man sich diesen alten Programmierstil 
(Verzögerung per nackter for-Schleife) nicht mehr anlernen.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> der programmer is im anhang
Hat der Programmer schon mal woanders funktioniert?
Oder ist da noch der nackte AVR drauf?

Autor: g457 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Geh mal die AVR-Checkliste [1] durch. Dann brems den Prommer aus mit '-B 
10' (..oder auch versuchsweise mit 20).

Sodann schnapp Dir ein Mulimeter oder besser ein Oszi falls greifbar. 
Damit überprüfst Du..
- RESET ist high
- RESET geht low wenn der Prommer prommen will
- auf SCK und MOSI kommen Daten wenn der Prommer prommen will
- auf MISO kommen Daten zurück

Ich gehe davon aus, dass bis hierher mindestens ein Test fehlschlagen 
wird. Die Frage ist welcher :-)

Achja war der Prommer schon mal irgendwoanders erfolgreich im Einsatz 
(vulgo ist ∗sicher∗ dass der funktioniert?)

HTH und viel Erfolg!

[1] http://www.mikrocontroller.net/articles/AVR_Checkliste

Autor: huibu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lothar Miller schrieb:
> Neinein, sowas sollte überhaupt nicht programmiert werden, denn es ist
> in keinster Weise portabel, denn in einem C-Programm ist kein Zeitbezug
> dargestellt

Der Compiler soll in erster Linie eine formale Spezifikation umsetzen. 
Wenn ich so etwas, aus welchen Gruenden auch immer, programmiere, dann 
hat das der Compiler nur zu optimieren, wenn ich ihn explizit dazu 
auffordere.

Mehr gibts dazu nicht zu sagen. Deine Wunschvorstellung in allen Ehren, 
aber so sollte es nicht sein.

Autor: Hubert G. (hubertg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Solltest du gar nicht zurecht kommen kannst du mich unter 
www.schorsch.at kontaktieren. Bin in der Nähe von Leondig.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.