-         

Ergebnis 1 bis 8 von 8

Thema: LED Knight Rider: Lauflicht Problem

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2007
    Beiträge
    26

    LED Knight Rider: Lauflicht Problem

    Anzeige

    Servus,

    ich hab gerade ein Lauflicht geschrieben. Geht auch wunderbar. Aber es läuft immer nur in einer Richtung. Wenn ich nur "vorwärts" (siehe Code-Kommentar) laufen lasse, geht es. Wenn ich nur "rückwärts" laufen lasse, ebenso. Wenn ich erst vorwärts, dann rückwärts laufen lassen will, läuft es nur rückwärts. Warum?

    Code:
    #include <avr/io.h>
    #ifndef F_CPU
    #define F_CPU 16000000     /* Quarz mit 16 Mhz  */
    #endif
    #include <util/delay.h>
    
    void set(int PCX) {
    	DDRC = (1<<PCX);
    	PORTC ^= (1 <<PCX);
    }
    
    void wait() {
    	int i;
    	for (i=1; i<=48; i++) {         
    		_delay_ms(62.5);
    	}
    }
     
    int main(void)
    {
        int PCX[8] = {PC0, PC1, PC2, PC3, PC4, PC5, PC6, PC7};
     	
    	int i;
    		
    	# Vorwärts
    	for (i=0; i<=7; i++) {
    		set(PCX[i]);
    		wait();
    	}
    
    	# Rückwärts
    	for (i=7; i>=0; i--) {
    		set(PCX[i]);
    		wait();
    	}
    
        return 0;
    }
    Danke.

  2. #2
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    Nachdem ich die Zeile PORTD = (1 <<PCX); so geändert habe ist es gelaufen.
    Speziell für so einfache Sachen ist das AVR-Studio mit seiner Simulationsmöglichkeit etwas ganz tolles. Das solltest du mal ausprobieren. Es ist kostenlos.

    Du musst es wieder auf PORTC ändern.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2007
    Beiträge
    26
    Hallo,

    danke für die schnelle Antwort!
    Gibt es das AVR-Studio oder Vergleichbares auch für MAC OS X? Für Windows ist das AVR-Studio ja echt super!

    Danke schonmal,

    Gruß
    thdrummer

  4. #4
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    Ich glaube nicht, zumindest steht auf der Atmel Seite nichts davon.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    08.02.2007
    Beiträge
    26
    Alles klar, danke für die schnelle Antwort!

  6. #6
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.03.2005
    Ort
    Villach
    Alter
    26
    Beiträge
    995
    Hi,

    muss DDRC = (1<<PCX); nicht als DDRC |= (1<<PCX); geschrieben werden?

    avr-gdb und simulavr gibs auf Linux zum simulieren. zwar eigendlich nur kommandozeile aber geht auch wenn man sich eingearbeitet hat. obs eine mac version gibt weis ich nicht aber du kannst dir ja notfalls eine selber kompillieren. mac hat ja auch einen Linux kernel

  7. #7
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.190
    @Superhirn
    In dem Fall ist es egal, man könnte die Zeile überhaupt weglassen und im main DDRC=0xff; schreiben.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    19.03.2005
    Ort
    Villach
    Alter
    26
    Beiträge
    995
    Noch ein schönheitsfehler:
    du verwendest int variablen. es reichen aber char variablen aus (gehen von -127 bis +127). oder unsigned char von 0-255. es braucht so weniger speicher und kann schneller ausgeführt werden. abe rist in deinem fall auch egal aber für die zukunft sicher gut zu wissen.

Berechtigungen

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