- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 9 von 9

Thema: LEDs mit Poti zuschalten über µC

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    08.02.2012
    Beiträge
    127
    Mit Geany kannst auch für die µC's compilen, man muss halt dafür'n paar Einstellungen zurechtbasteln und des avr-gcc draufhaben.

  2. #2
    Hallo,

    Also ich habe mich in den letzten Tagen dann nochmal an das Projekt gesetzt und nun kann ich erfolge vermerken:

    #include "avr/io.h"
    #include "util/delay.h"
    #include "stdlib.h"
    #include "avr/interrupt.h"
    #include "stdio.h"

    int main (void) {

    DDRD = 0xff; //DDRD alle Pins Ausgang
    ADMUX = 0x40; // Avcc=Referenz--> AVCC geschalten wie
    // im datenblatt seite 196, abbildung 96, Rechtsbündig, PC0 gewählt
    ADCSRA = 0x83; // ADC eingeschaltet, Taktung/8

    while(1)
    {
    ADCSRA |= (1<<ADSC); // start conversion

    if(ADCW<=200)
    {
    PORTD |= (1<<PD5);
    PORTD &= ~(1<<PD6);
    }
    else
    {
    PORTD |= (1<<PD6);
    PORTD &= ~(1<<PD5);
    }
    }
    return 0;
    }

    //das war ja einfach

    Ach ja: Ich habe den atmega16 aus versehen geschrottet, indem ich die internen 2,5V referenz eingeschalten habe und ihn extern mit 5V bestromt habe deswegen ist dieses Programm für einen Atmega8. beim atmega16 müsste das programm aber eigendlich nahezu gleich aussehen

    PS: ich habe noch ein Programm geschrieben, wo der controller mehrere messwerte nimmt und dann den durchschnitt errechnet, um messfehler zu verringern. das programm wird demnächst folgen

    MfG
    Michael
    Meine eigene cnc-Fräse:
    mihuno.oyla3.de

  3. #3
    Erfahrener Benutzer Roboter Genie Avatar von BMS
    Registriert seit
    21.06.2006
    Ort
    TT,KA
    Alter
    34
    Beiträge
    1.192
    Hallo,
    erst mal Glückwunsch, dass es soweit funktioniert
    Ich würde noch empfehlen, nach "start conversion" zu warten, bis der AD-Wandler wirklich fertig ist.
    Das geht mit
    Code:
        while(ADCSRA & (1<<ADSC));    //Warte bis Wandlung wirklich fertig ist
    Wenn du es wiederverwendbar programmieren möchtest, kannst du aus deiner Analog-Wandler-Routine eine Funktion (Methode) machen, die du immer wieder aufrufen kannst.
    Grüße, Bernhard

  4. #4
    Hallo,

    Na diese berichtigung nehme ich gerne an und baue sie noch schnell in mein programm ein:

    #include "avr/io.h"
    #include "util/delay.h"
    #include "stdlib.h"
    #include "avr/interrupt.h"
    #include "stdio.h"

    int main (void) {

    DDRD = 0xff; //DDRD alle Pins Ausgang
    ADMUX = 0x40; // Avcc=Referenz--> AVCC geschalten wie
    // im datenblatt seite 196, abbildung 96, Rechtsbündig, PC0 gewählt
    ADCSRA = 0x83; // ADC eingeschaltet, Taktung/8

    while(1)
    {
    ADCSRA |= (1<<ADSC); // start conversion
    while(ADCSRA & (1<<ADSC)); //Warte bis Wandlung wirklich fertig ist

    if(ADCW<=200)
    {
    PORTD |= (1<<PD5);
    PORTD &= ~(1<<PD6);
    }
    else
    {
    PORTD |= (1<<PD6);
    PORTD &= ~(1<<PD5);
    }
    }
    return 0;
    }


    Und wie versprochen noch das programm, das den wert öfters misst und dann mit dem durchschnittswert arbeitet. in meinem Fall wird 30x gemessen und dann der errechnete endwert ausgegeben:
    #include "avr/io.h"
    #include "util/delay.h"
    #include "stdlib.h"
    #include "avr/interrupt.h"
    #include "stdio.h"

    int main (void) {

    uint8_t durchlaufzaehler=0; //zählt die durchgänge
    uint16_t messwerte=0; //messwerte werden hier abgespeichert
    uint16_t endwert=0; //errechneter endwert

    DDRD = 0xff; //DDRD alle Pins Ausgang


    while(1)
    {
    for(durchlaufzaehler=0;durchlaufzaehler<30;durchla ufzaehler++) //diese schleife wird 30x durchlaufen
    {
    ADMUX = 0x40; // Avcc=Referenz--> AVCC geschalten wie
    // im datenblatt seite 196, abbildung 96, Rechtsbündig, PC0 gewählt
    ADCSRA = 0x83; // ADC eingeschaltet, Taktung/8
    ADCSRA |= (1<<ADSC); // start conversion
    while(ADCSRA & (1<<ADSC)); //Warte bis Wandlung wirklich fertig ist
    messwerte+=ADCW; // aufsummierung der messwerte
    }

    endwert=messwerte/30; //durchschnitt errechnen

    if(endwert<=200)
    {
    PORTD |= (1<<PD5);
    PORTD &= ~(1<<PD6);
    }
    else
    {
    PORTD |= (1<<PD6);
    PORTD &= ~(1<<PD5);
    }
    }
    return 0;
    }
    so, ich denke damit kann so mancher anfänger was anfangen
    Geändert von frankensteins-freund (23.12.2012 um 11:53 Uhr)
    Meine eigene cnc-Fräse:
    mihuno.oyla3.de

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 19.11.2006, 19:52
  2. Antworten: 7
    Letzter Beitrag: 12.07.2006, 00:52
  3. Motor über Poti steuern
    Von FoCus im Forum Elektronik
    Antworten: 22
    Letzter Beitrag: 11.07.2006, 12:12
  4. getriebemotor über poti ansteuern
    Von RedEagle667 im Forum Elektronik
    Antworten: 9
    Letzter Beitrag: 22.08.2005, 06:49
  5. Poti über uC Steuern
    Von Superhirn im Forum Sensoren / Sensorik
    Antworten: 8
    Letzter Beitrag: 28.04.2005, 16:22

Berechtigungen

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

Labornetzteil AliExpress