mikrocontroller.net

Forum: Compiler & IDEs STK500 Testprog funzt in C funzt nicht?


Autor: littlecb (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ich hab ein komisches Problem, vielleicht könnt ihr helfen.

habe mir ein STK500 zugelegt und gleich mal mit GCC das Testprogramm,
welches im User Guide in Assembler geschrieen steht in C geschrieben und 
im AVR-Studio simuliert. dann die HEX-Datei in den ATMega16 geschrieben. 
Aber nix tut sich ... absolut nichts. Ich finde einfach nicht den 
Fehler.

Also wie schon gesagt ich verwende einen ATmega16 mit internen 
RC-Oszillator
mit 1MHz.

zur Kontrolle hatte ich das Orginal-Programm-Hexfile von Atmel 
reingeschrieben und alles funzte auf anhieb.

Könnt ihr mir helfen?!

Autor: Uhu Uhuhu (uhu)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Poste mal das ASM-Programm - vielleicht macht die Portierung nach C was 
anderes, als dein C-Programm.

Autor: littlecb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welches ASM brauchst du jetzt von mir?

das, das ich in C übersetzt habe, oder ...

die Übersetzung meines Compilers?

Autor: littlecb (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Also hier hab ich erstmal die Übersetzung von GCC zu meinem C Programm.

das Orginal ASM Programm liefer ich noch nach. Sollte aber im Netz zu 
finden sein.

Autor: littlecb (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
So hier das Orginaltestprog vom STK500 in ASM.

wäre echt supi wenn von euch jemand den Fehler entdeckt.
Ist halt auch sehr eigenartig, weil die Simulation astrein funktioniert.
Nur nicht im ATMEGA.

best regards
littlecb

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du musst anstelle von KEYPORT natürlich KEYPIN einlesen. Sonst 
funktioniert gar nichts.

Eine andere Sache ist, dass das C-Programm etwas anderes macht als das 
Assembler-Programm. Im Assembler-Programm werden die Bits vom Port 
einzeln abgefragt, während das C-Programm den gesamten Port auf einen 
bestimmten Zustand hin abfragt.
sbis PIND, 0x00
fragt ab, ob das Bit Nr. 0 im Portregister gesetzt ist, während die 
Zustände aller anderen Bits im Portregister ignoriert werden.
if(PINx == 0b11111110){}
allerdings fragt ab, ob das Bit Nr. 0 "0" ist und alle anderen Bits im 
Register "1". Das kann nur funktionieren, wenn immer nur ein Taster 
betätigt wird. Mehrere Taster gleichzeitig gehen schief.
if(!(PINx & (1 << 0))){}
macht das, was im Assembler-Code vorgesehen ist. Ansonsten schau bitte 
mal ins AVR-GCC-Tutorial.

Autor: littlecb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Johannes,

super Hinweise von Dir. Werd ich heut nach der Arbeit gleich mal 
ausprobieren. Als du das mit den PINx abfragen erklärt hast fiel
mir es wie Schuppen von den Augen.

Also ich meld mich was draus wird.
Danke nochmals.

best regard
littlecb

Autor: littlecb (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Johannes,

hattest den absoluten Volltreffer! g

PIN statt PORT bei Zustandsabfrage ...

geändert => sofort funktioniert! :-D

best THX
Christian

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
littlecb wrote:
> hattest den absoluten Volltreffer! *g*
Ach was... Hattest Du daran gezweifelt? Hinfort mit Dir, Ungläubiger:-!

Ist doch hoffentlich klar, dass es mit PORTx nicht klappen KANN, weil 
sich das Register ohne Eingriff des Programms selbst nicht ändern kann. 
Nur PINx spiegelt wider, was tatsächlich an den Portpins los ist.

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.