- fchao-Sinus-Wechselrichter AliExpress         
Seite 2 von 3 ErsteErste 123 LetzteLetzte
Ergebnis 11 bis 20 von 24

Thema: LED an und aus schalten

  1. #11
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    02.11.2005
    Alter
    49
    Beiträge
    1.146
    Anzeige

    Powerstation Test
    Zitat Zitat von oberallgeier
    Zitat Zitat von askazo
    @oberallgeier: Wenn ein Port als Ausgang definiert ist, wird er mit dem PORTx-Register an- oder ausgeschaltet ...
    Na prima, dann weiß ich das jetzt auch. Hatte den Kommentar dummerweise gegeben, ohne das Board zu kennen - werde ich zukünftig bleiben lassen.
    Hm, das hat aber nix mit dem Board zu tun, sondern ist grundsätzlich bei allen AVR-Controllern so - bei Deiner Erfahrung solltest Du das eigentlich wissen...

    Gruß,
    askazo

  2. #12
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2010
    Ort
    Düsseldorf
    Beiträge
    24
    Hallo oberallgeier und askazo,

    herzlichen Dank für eure Hilfe. Wie schon erwähnt - Anfänger. Ich hab mein erstes Board seit einer Woche und kenne es quasi noch gar nicht und vor allem - ich weiß auch noch gar nicht was wichtig ist/was man wissen muss.

    Daher herzlichen Dank für die Erklärung. Ich werde entsprechend den Code nochmal überprüfen und meine Logik überdenken. Mal schauen ob es dann klappt.

    Bis dahin...
    Georg

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2010
    Ort
    Düsseldorf
    Beiträge
    24
    so, hier Version 2.0
    Die Schaltung ist diese: http://olimex.com/dev/images/avr-p28-sch.gif

    Und dieses hier der Code. Ich hatte aber noch keine Gelegenheit zu prüfen, ob er auf dem Board funktioniert. Für das Ein-/Ausschalten habe ich mich dieses Mal über #define entschieden, weil es weniger Code benötigt und die Übergabe einer Variable spart.

    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdint.h>
    
    #define LEDon PORTC &= ~(1<<5);	//LED ein mit PORTC5 als 0 da LED auf VCC
    #define LEDoff PORTC |= (1<<5);	//LED aus mit PORTC5 als 1 da LED auf VCC
    
    void initialize();
    
    int main(void)
    {
    	initialize();
    
    	while(1)
    	{
    		static uint16_t i=0;
    		
    		if(PIND & (1<<2))	//Wenn der Button gedrückt ist
    		{	
    			LEDon;		//LED ein und Zähler i auf 0
    			i=0;
    		} 
    		else			//Ist der Button nicht gedrückt
    		{			//i++ und 1ms Pause
    			i++;
    			_delay_ms(1);
    		}
    
    		if(i >= 1999))		//Ist i größer 2sec
    		{
    			Ledoff;		//LED aus und Zähler i auf 0
    			i=0;
    		}
    	}
    return 0;
    }
    
    void initialize()
    {
    	DDRB = 0x00;		//B als Eingang
    	DDRC = (1<<5);		//C5 als Ausgang für LED
    	DDRD = 0x00;		//D als Eingang
    
    	PORTD = (1<<2);		//PORTD2 mit PullUp-Widerstand (Doppelt zur Schaltung)
    
    	LEDon;			//zwei Mal blinken als Bestätigung
    	_delay_ms(200);
    	LEDoff;
    	_delay_ms(500);
    	LEDon;
    	_delay_ms(200);
    	LEDoff;
    }

  4. #14
    Benutzer Stammmitglied
    Registriert seit
    27.08.2006
    Alter
    76
    Beiträge
    83
    Hi,

    mein Bord funktioniert mit diesem Code:
    /* Sample program for Olimex AVR-P28 with ATMega8 processor
    * Blinks the led with a speed ~2Hz using a simple delay loop.
    * Compile with AVRStudio+WinAVR (gcc version 3.4.6)
    */

    #define __AVR_ATmega8__ 1

    #include <avr/io.h>
    #include <util/delay.h>
    #include <stdint.h>




    void Initialize(void)
    {
    PORTB = 0x0;
    PORTC = 1<<5; /* turn the LED off */
    PORTD = 0x0;

    DDRB = 0x0;
    DDRC = 1<<5; /* PD5 as output - the LED is there */
    DDRD = 0x0;

    }

    /* state = 0 -> Led Off
    * state = 1 -> Led On
    * state !=[0,1] -> Led Toggle
    */
    void LedSet(unsigned char state)
    {
    switch (state)
    {
    case 0:
    PORTC &= ~(1<<5);
    break;
    case 1:
    PORTC |= 1<<5;
    break;
    default:
    if (PORTC & 1<<5)
    PORTC &= ~(1<<5);
    else
    PORTC |= 1<<5;
    }

    }


    int main(void)
    {
    int i;

    Initialize();

    while (1)
    {
    LedSet(0);
    _delay_ms(200);
    //for (i=60000;i;i--);
    LedSet(1);
    _delay_ms(200);
    //for (i=60000;i;i--);
    }
    return 0;
    }

    Gruß
    Kurt

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2010
    Ort
    Düsseldorf
    Beiträge
    24
    Also es zeigt sich, dass bei mir die _delay_ms() Funktion nicht das tut, was sie soll. Das oben genannte Beispiel (welches das vom Anbieter mitgelieferte Beispiel ist, nur mit delay_ms) funktioniert auch nicht.

    Optimierung ist auf -0s eingestellt.
    #include <util/delay.h> am Anfang eingefügt.
    Außerdem werde ich nach der Frequency gefragt, hier habe ich für den ATMega8-16PU ......


    TADAAAA, es Klappt liebe Leute. Das Problem lag in der Angabe der Frequenz F_CPU. Mit 1000000 klappt jetzt alles ganz gut

  6. #16
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    ohne F_CPU aber mit delay hätte der (Pre-)Compiler aber eigentlich ne Warnung ausspucken müssen...
    #ifndef MfG
    #define MfG

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2010
    Ort
    Düsseldorf
    Beiträge
    24
    Nicht wenn man als Frequence 1000 drin stehen hat und nicht bedenkt dass ein Unterschied zwischen Hz und kHz besteht (zu meiner Verteidigung - ich hab einfach nicht drauf geachtet oder daran gedacht).

    Und so versinkt die Hilfe netter Leute in einem schwarzen Loch aus Dummheit von einem. Trotzdem herzlichen Dank nochmal. Bin begeistert wie schnell und ausführlich hier im Forum geholfen wird...

    Grüße
    Georg

  8. #18
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.693
    Zitat Zitat von Lightstorm
    ... Und so versinkt ... in einem schwarzen Loch aus Dummheit ...
    Einstein würde Dich wegen dieses Ausdrucks beneiden, wenn er die schwarzen Löcher schon gekannt / noch erlebt hätte. Ich dagegen wär froh, wenn meine Dummheit ein schwarzes Loch wäre - weil schwarze Löcher ausserhalb ihres Ereignishorizontes nix rauslassen. Bei denen bleibt die Dummheit drin - bei mir nicht *ggg* - und es ist mit der Dummheit noch seltsamer - die Massenbilanz stimmt nicht - dauernd strömt was raus, aber es wird nicht weniger. Das alles ist aber nicht wirklich ernst gemeint.

    Zitat Zitat von Jaecko
    ohne F_CPU aber mit delay hätte der (Pre-)Compiler aber eigentlich ne Warnung ...
    Na ich weiß nicht, bei meinem AVRStudio meckerte er nicht. Ich hab das gerade ausprobiert. ABER ich habe auch brav unter [Configuration Options] die Frequency: [1000000] hz stehen . . . .
    Ciao sagt der JoeamBerg

  9. #19
    Neuer Benutzer Öfters hier
    Registriert seit
    23.02.2010
    Ort
    Düsseldorf
    Beiträge
    24
    @oberallgeier: Sehr geiler Spruch!!!

    Ich hab die Frequenz auch nur in der Konfiguration in AVRStudio eingetragen. Mehr braucht es nicht.

  10. #20
    Erfahrener Benutzer Robotik Einstein Avatar von Jaecko
    Registriert seit
    16.10.2006
    Ort
    Lkr. Rottal/Inn
    Alter
    42
    Beiträge
    2.009
    Wenn die Frequenz bei der Config drinsteht, wird F_CPU automatisch definiert; es taucht automatisch die Compileroption -DF_CPU=xxx auf.
    Lässt sich auch prüfen, wenn da was drinsteht und dann im Programm nochmal #define F_CPU xxx versucht wird.
    #ifndef MfG
    #define MfG

Seite 2 von 3 ErsteErste 123 LetzteLetzte

Berechtigungen

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

Solar Speicher und Akkus Tests