mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR-Simulator im AVR Studio


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo ein blutiger AVR Studio Anfänger bitte Euch mal um Hilfe zum 
Smulator.

Ich habe hier ein kleines Testprogramm:

#include <avr/io.h>

#ifndef F_CPU
#define F_CPU 4000000L
#endif

#include <util/delay.h>

int main (void) {

   DDRB  = 0xff;
   DDRC  = 0x00;
   PORTC |= (1<<PC0);

while(1){
 if ( PINC & (1<<PINC0) ) {
   PORTB = 0xff;
 }else{
  PORTB = 0x00;
 }
}
   return 0;
}


Wenn ich das übersetzt habe und im Simulator debuggen möchte kann ich 
während der Laufzeit:

erstens nicht die das 1. I/O Pin am PORTC "an- ausschalten"
zweitens ändert sich der Portzustand an PORTB nicht sichtbar?

Habt Ihr eine Idee was ich falsch mache respektive nicht richtig 
eingestellt habe?
Programmablauf per Einzelschritt ist soweit richtig.

Danke Tom

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Programm sieht sinnvoll aus. Etwas mehr Kommentare schaden nicht.

#include <avr/io.h>

int main (void) 
{
  // Datenrichtung an PORTB: Alle Pins sind Ausgang
  DDRB  = 0xff;

  // Datenrichtung an PORTC: Alle Pins sind Eingang
  DDRC  = 0x00;

  // Interner Pullupwiderstand an PC0 einschalten
  PORTC |= (1<<PC0);

  while(1)
  {
    // wenn GENAU JETZT HIGH an PC0 anliegt
    // Pullup an PC0 spricht für active-low Taster/Schalter (#1)
    // => active-low angeschlossener Taster/Schalter nicht betätigt
    if ( PINC & (1<<PINC0) ) 
    {
      // dann setze alle Pins an PORTB auf HIGH
      // => active-low angeschlossene LEDs (#2) ausschalten
      PORTB = 0xff;
    }
    else
    {
      // ansonsten, wenn LOW an PC0 anliegt
      // => active-low angeschlossener Taster/Schalter betätigt
      // setze alle Pins an PORTB auf LOW
      // => active-low angeschlossene LEDs (#2) einschalten
      PORTB = 0x00;
    }
  }

  return 0;
}


Möglicherweise passt deine Hardware nicht zu dem Programm?

Wie hast du den Taster/Schalter an Pin PC0 angeschlossen?
Wie hast du die LEDs an PORTB angeschlossen?

Siehe auch:
#1 
http://www.mikrocontroller.net/articles/AVR-GCC-Tu...
#2 
http://www.mikrocontroller.net/articles/AVR-Tutori...

Wieviel Anfänger bist du? Kann es noch sein, dass das Programm noch 
nicht im µC ist? Oder dass das Programm für AVR Typ XYZ übersetzt wurde 
und auf dem STK500 befindet sich ein AVR Typ ABC?

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

Bewertung
0 lesenswert
nicht lesenswert
@Stefan B.:
Es geht hier offensichtlich um Debugging im Simulator. Hardware ist 
hier noch gar nicht im Spiel. Dementsprechend gibt's auch keine echten 
Taster usw.

Mit dem Kommentar hingegen volle Zustimmung! Sollte man sich direkt von 
Anfang an dran gewöhnen, auch Testprogramme zu kommentieren, erst recht, 
wenn man sie anderen zeigen will...

@Tom:
In welchem Modus simulierst Du das denn? Wenn Du die Änderungen der 
Register sehen willst, musst Du entweder in Einzelschritten durchsteppen 
oder im Autostep. Oder Du musst an Stellen, an denen Du Änderungen 
erwartest, Breakpoints setzen und dann mit Run starten.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach so. Dann Kommando zurück.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@all

Danke erst mal.

Das Program habe ich blos mal schnell hingeschrieben, um den Simulator 
zu testen und das AVR Studio besser kennen zu lernen. Deshalb 
unkommentiert.


@Johannes M

Ja Einzelstep funktioniert ja auch.
Aber wenn ich Autostep(run F5) benutze kann ich das Input PIN 1 an Port 
C nicht setzen und ich sehe keinen Output an Port B. Kann es sein, das 
das so nicht funktioniert?

Der Portzustand ändert sich auch nicht, wenn ich einen Blinkgeber wie:

while(1){

  _delay_ms(1000);
  PORTB = 0xff;
  _delay_ms(1000);
  PORTB = 0x00;
}

den benutze???

LG Tom

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Kann es sein, das das so nicht funktioniert?

Genau, um Register oder Eingänge zu verändern oder Register oder 
Ausgänge zu lesen, muss die Simulation angehalten sein, das geht nicht 
"während der Fahrt".

Gewöhne Dir ab besten die Arbeit mit Haltepunkten an. Neben Halt an 
bestimmten Stellen gibt es auch Halt bei Veränderung von Variablen.

~

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

Bewertung
0 lesenswert
nicht lesenswert
Sinusgeek wrote:
> Genau, um Register oder Eingänge zu verändern oder Register oder
> Ausgänge zu lesen, muss die Simulation angehalten sein, das geht nicht
> "während der Fahrt".
Hmmm, ich meine, mich erinnern zu können, dass man zumindest im 
Auto-Step-Modus dazwischenhauen kann. Oder irre ich mich da?

Gruß

Cosinusfreak

Autor: Sinusgeek (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß nicht, den Autostep benutze ich nicht, da er keinen "Rückwärtsgang" 
hat. ;-)

Ich bevorzuge Haltepunkte, danach Einzelschritt durch den zu prüfenden 
Code, dann Run bis zum Haltepunkt. Bei Warteschleifen (wie im Beispiel) 
könnte auch Step Over sinnvoll sein, Warteschleifen sind aber nicht mein 
Stil, selbst für den einfachsten Blinker benutze ich einen der 
mitbezahlten Timer.

~

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.