-
        

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: AVR Studio Simulation?

  1. #1
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607

    AVR Studio Simulation?

    Anzeige

    Hey

    ich habs jetz mit Sp2 ans laufen gebracht. Von µC.net hab ich mir mal das Tutorial reingezogen (so mehr oder weniger) und den ersten code blindlings eingegeben und versucht zu compilieren

    Code:
    /* Alle Zeichen zwischen Schrägstrich-Stern 
       und Stern-Schrägstrich sind lediglich Kommentare */
     
    // Zeilenkommentare sind ebenfalls möglich
    // alle auf die beiden Schrägstriche folgenden
    // Zeichen einer Zeile sind Kommentar
     
    #include <avr/io.h>          // (1)
     
    int main (void) {            // (2)
     
       DDRB  = 0xff;             // (3)
       PORTB = 0x03;             // (4)
     
       while(1) {                // (5a)
         /* "leere" Schleife*/;  // (5b)
       }                         // (5c)
     
       /* wird nie erreicht */
       return 0;                 // (6)
    }
    Okay ich weis das da nich viel passiert aber irgendwie muss die simulation ja laufen. ICh bekams aber nur hin das er sich einen Controller suchte. Da keiner vorhanden is kanner da lang suchen^^

    Wie krieg ich also eine sim hin?

    Egal mit welchem cod
    e
    mfg[/code]

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    30
    Beiträge
    478
    Was passiert denn genau

    Was passieren sollte: Im Code-Bereich so ein kleines gelbes Pfeilchen vor die Zeile mit:
    "int main(void){"

    Allg. Vorgehensweise:
    erstmal auf "BUILD", dann auf "START DEBUGGING" (Grünes Pfeilchen).

    Erst, wenn er dann mal läuft kannst du im Menü unter "Debug" --> "AVR-Simulator-Options" den Typ und die Taktfrequenz einstellen.

    Ich hoffe mal, dass ich die Frage richtig beantwortet habe ^^

    /mfg plusminus

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    was mir gerade einfällt, der pfad für die io.h ist nich komplett....

    Und im Atmel Ordner ist weder eine iostream.h noch eine io.h noch eine *.h ...

    In den optionen kann ich einen pfad angeben ich wüsste nur nich welchen. Ich denke da liegt der Hundbegraben, weil er führt ja nich mal das Make aus

    edit:
    http://download.savannah.gnu.org/releases/avr-libc/
    wäre das meine hilfe?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    30
    Beiträge
    478
    du suchst im falschen ordner.
    Der C-Code kommt nämlich von WinAVR und nicht vom Atmel AVR-Studio.

    #include <avr/io.h>

    sucht im standard-include-verzeichnis von WinAVR und das ist etwa:

    C:\WinAVR\avr\include\

    da findet er dann auch die
    C:\WinAVR\avr\include\avr\io.h

    /mfg plusminus

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Zitat Zitat von plusminus
    du suchst im falschen ordner.
    Der C-Code kommt nämlich von WinAVR und nicht vom Atmel AVR-Studio.

    #include <avr/io.h>

    sucht im standard-include-verzeichnis von WinAVR und das ist etwa:

    C:\WinAVR\avr\include\

    da findet er dann auch die
    C:\WinAVR\avr\include\avr\io.h

    /mfg plusminus

    Ich hab vergessen WinAVR zu Installieren bzw nich dran gedacht

    Jetzt tut das ganze und ich muss nur noch rausfinden was mir die Sim bringt *g* ich mein in meinem Beispiel tut sich nich viel. Aber Bildlich eine LED und einen Taster kann ich nicht verwenden richtig?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    30
    Beiträge
    478
    ^^
    *owned*)

    Die Simulationsumgebung ist eigentlich wirklich nützlich, z.B. hab ich rad eben benutzt um zu schauen, wie der AVR mit dem modulo-Operator umgeht oder vor ein paar Tagen hab ich meine "delayMilliSeconds(int)"-Schleife getestet.
    Der arbeitet übrigens nicht in Echtzeit. (Bzw sind die Rechner zu lahm)

    Einen Taster kannst du sehr gut simulieren, du kannst nämlich einfach in den Registern rumpfuschen, also mit einem Klick einen EingangsPort aka "Taster" setzen. (und das ganz ohne prellen =) )

    /mfg plusminus

  7. #7
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    ich schau mir das heute nochmal in aller ruhe an


    Heist ich sach ihm if(portxy=1) then port(z)== 1 (hiernur stilisiert) und klick dann port xy an und sehe ds port z ebenfalls ein schwarzes kästchen (=1) bekommt

    Ich hatte gehofft auch testen zu können wie sich PWM und I²C verhalten. Das wird da etwas schwerer aber fürn anfang reichts danke


    edit
    Code:
    #include <avr/io.h>
    #include <inttypes.h>
    
    #ifndef F_CPU
    #define F_CPU 3686400UL			/*Quarz mit 3.6864 Mhz */
    #endif
    
    #include <avr/delay.h>			/* definiert _delay_ms() */
    
    /* Einfache Funktion zum Entprellen eines Tasters */
    inline uint8_t debounce(volatile uint8_t *port, uint8_t pin)
    {
    	if ( ! (*port & (1 << pin)) )
    	{	
    		/* Pin wurde auf Masse gezogen, 100ms warten */
    		_delay_ms(100);
    		if ( ! (*port & (1 << pin)) )
    		{
    			/* Anwender hat Zeit zum Loslassen des Tasters gegebn */
    			_delay_ms(100);
    			return 1;
    		}
    	}
    	return 0;
    }
    
    int main(void)
    {
    	DDRB &= ~( 1 << PB0 );				/* PIN PB0 auf Eingang (Taster)		*/
    	PORTB |= ( 1 << PB0 );				/* Pullup-Widerstand Aktivieren		*/
    
    	if (debounce(&PINB, PB0))			/* Falls Taster an PIN PB0 Gedrückt	*/
    	{
    		PORTD = PIND ^ ( 1 << PD7 );	/* LED an PinD7 an bzw ausschalten	*/
    	}
    
    	PORTB = (1<<PB4);
    }
    sollte hier nich zumindest Pin4 an PortB = 1 sein? Dauerhaft?
    Code:
    c:/winavr/bin/../avr/include/avr/delay.h:36:2: warning: #warning "This file has been moved to <util/delay.h>."
    ../io.c: In function 'main':
    ../io.c:40: warning: control reaches end of non-void function
    und warum passt ihm das nich?

    Also in der Simulation wird nichts 1 und hat auch nich den Status 1.. infoquelle ist das AVR GCC Tutorial, da is auch der code her

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    30
    Beiträge
    478
    Testen von I²C ist etwas schwer, weil du per Hand das gegenstück simulieren darfst


    sind ja nur warnings, also halb so wild.

    Du willst lib ( <avr/delay.h> ) includen, die vom WInAVR-Team an nen anderen Platz "verlegt" wurde. Schau doch mal rein:

    Code:
    #ifndef _AVR_DELAY_H_
    #define _AVR_DELAY_H_
    
    #warning "This file has been moved to <util/delay.h>."
    #include <util/delay.h>
    
    #endif /* _AVR_DELAY_H_ */
    Er lenkt den include quasi um

    2te Warning kommt deswegen, weil du vergessen hast ein "return 0;" ans Ende einer int-Funktion zu schreiben.

    2. Geht mal schritt für schritt deinen Code durch
    Du bist nach vllt 20 mikrosekunden am ende, du hast nämlich keine (Endlos-)Schleife drin...

    /mfg plusminus

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    02.11.2005
    Beiträge
    1.607
    Den Code hab ich 1:1 vom AVR GCC Tut übernommen, vergessen hab zumindest ICh nichts *g*
    Aber auch mit return 0; tut sich da kein unterschied auf. Sollte ja zumindest der eine Port auf 1 sein ^^

    was mich halt an der warnung irritiert ist der satz
    ../io.c:40: warning: control reaches end of non-void function

    Oder will der einfach nur ein return 0; sehen?

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.06.2006
    Ort
    Schriesheim
    Alter
    30
    Beiträge
    478
    haja, steht ja da

    ende einer nicht-void-funktion erreicht und es wird nicht zurückgegeben = unschön

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •