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
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.
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
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.
Gruß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); } }
Frank
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)); }
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; }
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
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.)
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
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
PUD ist FALSE. Das heisst aber nur, dass die Pullups an sind, wenn ausserdem das Port-Register des Eingangs 1 ist.Ist der Pullup widerstand nach einem Reset nicht automatisch eingeshaltet (PUD=FALSE im SFIOR nach einem Reset?)
Wenn PUD TRUE ist, sind die Pullups ungeachtet der Werte des Ausgangsregisters immer ausgeschaltet.
it works best if you plug it (aus leidvoller Erfahrung)
Lesezeichen