- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 12

Thema: Code für eine Fußraumbeleuchtung im LKW

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    25.01.2018
    Beiträge
    9
    Danke, ich werde es nachher Testen...

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Code:
    #define FADE_SPEED_IN  200  // schnell heller werden
    #define FADE_SPEED_OUT 500  // langsamer ausgehen
    
    #define FADE_MIN 10
    #define FADE_MAX 255
    
    value = FADE_MIN;  // Start Bedingung 30 Prozent
    
    while (1)
    {
      OCR0A = value;  // PWM setzen
    
      if (PINB & (1<<PB3)) // Prüfe auf High Signal an PB3
      {
        if (value < FADE_MAX) value++;
        _delay_ms(FADE_SPEED_IN);
      } else 
      {
        if (value > MIN) value--;
        _delay_ms(FADE_SPEED_OUT);
      }
    
    }

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    25.01.2018
    Beiträge
    9
    Hallo, danke für die Codes aber ich habe versucht meinen Code zu nutzen mit dem Tipp von Siro, sonst ist der lern effekt gleich null....

    Habe das ganze jetzt ein wenig umgebaut, das blinken konnte ich so beheben
    Jetzt habe ich aber das Problem das die LED nicht zurück Faded wenn ich das High Signal auf Low ziehe.....
    externer Pull-down Wiederstand ist vorhanden...
    Kann mir jemand noch einen Tipp geben, habe schon alles verucht mit "else if" oder "else" nur "if", ich habe den verdacht das der Code sich nach der ersten If abfrage hängen bleibt...



    Code:
      
     #include <avr/io.h>
     #define F_CPU 1200000UL  // 1,2 MHz
     #include <util/delay.h>
    
    
    
     int main (void)
     {
    	 DDRB =(1<<PB0);                                                              // Ausgang PB0
    
    	 TCCR0A=(1<<COM0A1) | (1<<WGM00) | (1<<WGM01);     // PWM Phase Korrigieren, OCR0A an TOP setzen
    	 TCCR0B=_BV(CS01) ;                                // Prescaler 8
    
    	 int a=5;                                                                            // Min Wert für Lichtstärke
    	 int b=255;                                                                        // Max Wert für Lichtstärke
    
             while (1) {
    {
    		 OCR0A = a;                                                              // Startpunkt mit Min Lichtstärke
    		                                 
    		 if (PINB & (1<<PB3))                                                // Prüfe auf High Signal an PB3
    		 {
    			if (a <255) a++;                                               // Wenn Wahr dann erhöhe in  5s auf den Wert "b"
    			 _delay_ms(5);
    					 
    		 }
    
    		 else // (!(PINB & (1<<PB3)))                                  // Prüfe ob PB3 Low wenn Wahr zurück zu "a"
    		 {
    			 if (b >10) b--;                                               // Wenn solange der wert Max gößer als Min dann b--
    			 _delay_ms(5);
    			// OCR0A =a;	
    		 }
    
    
    
    
    }
    	}
    	 return 0;
    
     }
    Geändert von Live85 (27.01.2018 um 01:45 Uhr)

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Hallo,

    da du OCR0A nur den Wert a zuweist, darfst du auch nur diesen ändern:

    Code:
    if (a >10) a--;
    Viele Grüße,
    Andreas

  5. #5
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Hallo Live85
    nimm mal das "return 0;" raus.
    Das gehört da nicht rein.....
    Ein Return brauchst Du nur in Unterfunktionen die vom Hauptprogramm oder woher auch immer aufgerufen werden.
    Du hast ja nur eine einzige Schleife, wo soll er dann landen mit dem Return.

    sorry, das return steht ja hinter der while Schleife, da stört es keinen, da kommt der code ja nie an.....
    Da sind aber ein paar geschweifte Klammern zu viel, das hat mich verwirrt.
    Du hast 2 mal { bei dem while und am Ende dann auch zwei mal } das tut nicht weh, ist aber unnötig und verwirrt.
    Dein return am Ende darf dort stehen und hat oftmals auch seine Berechtigung. Das ist eigentlich für Programme zum Beispiel auf nem PC
    da gibt man dann beim Verlassen des Programms eine Wert 0 zurück um zu signalisieren dass das Programm ordnungsgemäß
    verlassen wurde oder auch ein Übergabewert für andere Programme (Der sogenannte Exitcode)
    Dein Programm läuft aber ständig und sollte dort niemals ankommen.


    Andreas hat recht, das b benutzt Du ja garnicht. Da liegt das Problem

    Ein schönes Wochenende
    Siro
    Geändert von Siro (27.01.2018 um 08:35 Uhr)

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.08.2006
    Ort
    Würzburg, Germany
    Beiträge
    716
    Zitat Zitat von Siro Beitrag anzeigen
    nimm mal das "return 0;"
    Das stimmt so nicht! main ist eine Funktion (vom Typ int) und in eine Funktion MUSS ein Return rein, sonst warnt der Compiler!
    Man sollte nur dafür sorgen, dass der Ablauf dort nie hin kommt, was in einem sinnvoll strukturiertem Programm auch nicht der Fall sein wird.

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Habe ich korrigiert Andreas, das hatte ich falsch interpretiert, ich dachte er springt aus der While Schleife.
    Geändert von Siro (27.01.2018 um 08:36 Uhr)

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    25.01.2018
    Beiträge
    9
    Hallo, habe die Fehler beseitigt und jetzt geht alles wie gewollt, ich bin davon ausgegangen das OCR0A dann automatisch zu "b" wird da der wert "10" ist, habe dem ganzen wohl zuviel Logisches denken zugemutet und den absatz im AVR Buch vollkommen falsch interpretiert ...
    Auf dem Ozi kann ich auch schön sehen wie sich das PWM Signal ändert....

    Danke für die Tipps

    Code:
      
     #include <avr/io.h>
     #define F_CPU 1200000UL  // 1,2 MHz
     #include <util/delay.h>
    
    
    
     int main (void)
     {
    	 DDRB =(1<<PB0);                                                             // Ausgang PB0
    
    	 TCCR0A=(1<<COM0A1) | (1<<WGM00) | (1<<WGM01);     // PWM Phase Korrigieren, OCR0A an TOP setzen
    	 TCCR0B=_BV(CS01) ;                                                        // Prescaler 8
    
    	 int a=5;                                                                            // Min Wert für Lichtstärke
    	 int b=255                                                                         // Max Wert für Lichtstärke
    
             while (1) 
    			 
    {
    		 OCR0A = a;                                                              // Startpunkt mit Min Lichtstärke
    		                                 
    		 if (PINB & (1<<PB3))                                                 // Prüfe auf High Signal an PB3
    		
    		 {
    			if (a <255) a++;                                                // Wenn Wahr dann erhöhe in  5s auf den Wert "b"
    			 _delay_ms(5);			 
    		 }
    
    		
    		 else // (!(PINB & (1<<PB3)))                                     // Prüfe ob PB3 Low wenn Wahr zurück zu "a"
    		 
    		 {
    			 if (a >10) a--;                                                    // Wenn solange der Wert Max gößer als Min dann a--
    			 _delay_ms(5);	
    		 }
    }	 
    	 return 0;
    
     }

Ähnliche Themen

  1. PHP Code: Buch, Frameworks um in Zukunft saubereren Code zu schreiben
    Von Thor_ im Forum PC-, Pocket PC, Tablet PC, Smartphone oder Notebook
    Antworten: 1
    Letzter Beitrag: 21.11.2014, 17:25
  2. eine Ecke für Code Schnippsel
    Von CODrix im Forum Anregungen/Kritik/Fragen zum Forum und zum Wiki RN-Wissen
    Antworten: 3
    Letzter Beitrag: 16.07.2013, 12:32
  3. [ERLEDIGT] Eine Bitte bezüglich des Code-Tag Buttons
    Von TobiKa im Forum Anregungen/Kritik/Fragen zum Forum und zum Wiki RN-Wissen
    Antworten: 4
    Letzter Beitrag: 23.03.2011, 14:44
  4. Code-Schloss mit Tastatur, LCD und Logger. Code-Beispiel
    Von Stray_Cat im Forum Controller- und Roboterboards von Conrad.de
    Antworten: 2
    Letzter Beitrag: 05.06.2009, 10:31
  5. Bascom Code in GCC Code umschreiben
    Von Martin. im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 13.07.2008, 19:14

Berechtigungen

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

12V Akku bauen