-         
+ Antworten
Seite 1 von 6 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 52

Thema: GCC Beispiele für AVR?

  1. #1
    Gast

    GCC Beispiele für AVR?

    Wie wäre es wenn ihr in diesem Thread ein paar Codeschnipsel postet, welcher die grundlegenden Dinge demonstrieren.

    z.B.

    - wie man digitalen Port abfragt
    - wie man analogen Port abfragt
    - wie man bestimmte frequen am PWM Port ausgibt
    - wie man timer nutzt
    - wie man interrupt nutzt
    u.s.w.

    Jeder könnte was beisteuern! In anderem Thread könnte es man das gleiche in einer anderen Sprache (Basic / Assembler) machen.

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    22.11.2003
    Beiträge
    991
    Ich will sowas demnächst in einem Tutorial zusammenstellen....
    Dauert aber noch einen kleinen Moment. ( Nach dem 15. Januar hab ich wieder mehr Zeit für sowas )

    MfG Kjion

  3. #3
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Wenn jemand ein Beispiel zu Hand hat, dann wäre doch Posting ganz gut. Kann Kjion gleich in seinem Tutorial einbauen, ich denke dagegen hat keiner etwas. Das Tutorial erleichtert den Einstieg doch erheblich, ich habe schon ersten Auszug gesehen.
    <an Kjion>: Vielleicht kannst DU das Pony Programm auch noch in das Notepad2 einbinden. Ich hab das auch so gemacht, dann hat man gleich alles zusammen.

    Hier noch mal das umgeschriebene LED-Beispiel. PORT B und D werden als Ausgang geschaltet und dann wird am Port B hochgezählt. Eine LED an Port B wird blinken. Dürfte glaube ich auf allen AVR´s so funktionieren wenn die entsprechenden Port´s vorhanden sind.

    Code:
    #include <avr/io.h>
    //**********************************************************
    
    char i=0; //Globale 8-Bit Variable
    
    //**********************************************************
    
    void warten(int t) //ermöglicht Pausen 
    {
     int h;
     for (;t>0;t--)
     {
      for (h=1600;h>0;h--) {}
     }
     return;
    }
    
    //**********************************************************
    
    int main(void)
    {
      char i=0; //Lokale 8-Bit Variable
    
    	//Setzen der Ein + Ausgänge
    	DDRB = 0xFF; //PortB: alles als Ausgäng
    	DDRD = 0xFF; //PortD: alles als Ausgang 	
    
    	//Ports digital ansteuern
    	PORTB = 0x00; //Alle Ausgänge werden auf low gesetzt
    	PORTD = 0x00; //Alle Ausgänge werden auf low gesetzt
     
    	while (1)  //Endlosschleife
    	 {
    	   i++;
    	   PORTB=i;
    	   warten (150);
    	 }
       
    }
    Gruß
    Frank

  4. #4
    Gast
    Zur Abfrage analoger Ports kann ich folgenden Code beisteuern

    Code:
    void AD_Init(void)
    {
       outb(BV(ADEN) | BV(ADSC) | BV(ADPS1) | BV(ADPS2), ADCSR);
       while (inp(ADCSR) & BV(ADSC));
    }
    
    unsigned int ADReadPort(unsigned char port)
    {
       outp(port, ADMUX);
       outp(inp(ADCSR) | BV(ADSC), ADCSR);
       while (inp(ADCSR) & BV(ADSC));     
       return (__inw(ADCL));
    }

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    29
    Beiträge
    215
    Da ich vor kurzer Zeit auch noch ziemlicher Anfänger war was Microcontroller betrifft finde ich diesen Thread sehr gut. Ich will einfach mal nen Stück Quelltext anhängen. Das ist sozusagen eine kleine
    ADconverting Bibliothek die nur aus #define´s besteht.
    Gruß Muraad

    Code:
    #include <io.h>
    #define ADCinit           ADCSRA|=_BV(ADEN)         // Teilt dem Board mit das der jeweilige Port für ADC verwendet wird
    #define ADCdisable        ADCSRA &=~_BV(ADEN)       // machs das vorherige wieder rückgänig
    #define ADCstart          ADCSRA|=_BV(ADSC)         // startet eine konvertierung auf dem gewünschten Kannal/Pin
    #define ADCfree           ADCSRA|=_BV(ADATE)        // schaltet den freilaufenden Modus ein
    #define ADCvintern        ADMUX=_BV(REFS1) |_BV(REFS0)     // interne Spannungsversorgung
    #define ADCprescaler_2    ADCSRA |=_BV(ADPS0)              // gewünschter Teilungsfaktor/Prescaler 
    #define ADCprescaler_4    ADCSRA|=_BV(ADPS1)
    #define ADCprescaler_8    ADCSRA=_BV(ADPS1) | _BV(ADPS0)
    #define ADCprescaler_16   ADCSRA|=_BV(ADPS2)
    #define ADCprescaler_32   ADCSRA=_BV(ADPS2) | _BV(ADPS0)
    #define ADCprescaler_64   ADCSRA=_BV(ADPS2) | _BV(ADPS1)
    #define ADCprescaler_128  ADCSRA=_BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0)
    #define ADCchannel_1                                      //gewünschter Kannal z.B bei ATmega32 PINA0 - PINA7
    #define ADCchannel_2      ADMUX|=_BV(MUX0)                // bei nicht freilaufen muss ADCchannel_x vor
    #define ADCchannel_3      ADMUX|=_BV(MUX1)                // ADCstart kommen dann kann man mit getadc() der 
    #define ADCchannel_4      ADMUX= _BV(MUX1) | _BV(MUX0)    // Adcwert des gewählten Kannals auslesen
    #define ADCchannel_5      ADMUX|=_BV(MUX2)
    #define ADCchannel_6      ADMUX= _BV(MUX2) | _BV(MUX0)
    #define ADCchannel_7      ADMUX= _BV(MUX2) | _BV(MUX1)
    #define ADCchannel_8      ADMUX= _BV(MUX2) | _BV(MUX1) | _BV(MUX0)
    
    inline unsigned int getadc(void)
    {
       while (ADCSRA & _BV(ADSC)) {}
       return ADC;
    }
    Angehängte Dateien Angehängte Dateien

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    23.05.2004
    Ort
    Untersöchering(Bayern,Alpenvorland)
    Alter
    29
    Beiträge
    215
    Hab jetzt in meiner kleinen Bibliothek den ADconverting Teil bisschen überarbeitet und einen Teil zur PWM Ausgabe mit Timer2(16Bit Timer) geschrieben. Ich habe das ganze jetzt in ein Rar Archiv gepackt und zwei Beispielprogramme hinzugefügt. Ach meine Bibliothek bezieht sich auf den ATmega32, um ihn für andere Atmels umzuschreiben muss man theoretisch aber höchsten ein paar Registernamen oder Bitname ändern.
    Gruß Muraad
    Angehängte Dateien Angehängte Dateien

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2004
    Ort
    Luxemburg
    Beiträge
    12
    Hallo,

    Ich bin gerade dabei einige Beispielprogramme fuer das RN-Control 1.4 zu schreiben. Leider bin ich auf dem Gebiet der AVR-programmierung noch ein blutiger Anfänger. Das Ziel meines ersten Demo programms ist es den durch das Tastenfeld generierte Analogwert mittels der vorhandenen Led's anzuzeigen. Leider funktioniert mein Programm nicht wie erwuenscht. Den einzigen unterschied den ich zu dem Vorherigen
    Programm feststellen kann ist das ich DDRA nicht explizit auf 0 setze. Da ich das Board zum testen gerade nicht bei Hand habe wuerde mich interessieren ob das DDRA nicht sofort beim Reset des Mikrocontrollers auf 0 initialisert ist?


    Bis denne.

    (Sobald das Programm laeuft werde ich es hier posten.)

  8. #8
    Administrator Robotik Einstein Avatar von Frank
    Registriert seit
    30.10.2003
    Beiträge
    4.943
    Blog-Einträge
    1
    Ja, das Datenrichtungsregister DDRA ist nach Reset auf 0 (Eingang)!
    Bei der Tastaturabfrage nicht vergessen den Pullup-Widerstand zu aktivieren!
    Wäre fein wenn du Beispiel dann postest

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    21.07.2004
    Ort
    Luxemburg
    Beiträge
    12
    Ist der Pullup widerstand nach einem Reset nicht automatisch eingeshaltet (PUD=FALSE im SFIOR nach einem Reset?)

    Den Source Code werde ich dann hier posten, jedoch kann das einige
    Tage dauern da ich keine Möglichkeit zur Zeit habe den Code zu testen.

    Bis denne

  10. #10
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    02.03.2004
    Ort
    Paderborn
    Alter
    32
    Beiträge
    614
    Ist der Pullup widerstand nach einem Reset nicht automatisch eingeshaltet (PUD=FALSE im SFIOR nach einem Reset?)
    PUD ist FALSE. Das heisst aber nur, dass die Pullups an sind, wenn ausserdem das Port-Register des Eingangs 1 ist.
    Wenn PUD TRUE ist, sind die Pullups ungeachtet der Werte des Ausgangsregisters immer ausgeschaltet.
    it works best if you plug it (aus leidvoller Erfahrung)

+ Antworten
Seite 1 von 6 123 ... LetzteLetzte

Benutzer, die dieses Thema gelesen haben: 0

Derzeit gibt es keine Benutzer zum Anzeigen.

Berechtigungen

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