- 3D-Druck Einstieg und Tipps         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 23 von 23

Thema: ATMEGA32 ADC PWM

  1. #21
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.235
    Anzeige

    Powerstation Test
    65536/(717-307) = 159 + Angstfaktor = 161.

    Der A/D Wandler liefert Werte zwischen 307 und 717 (rechnerisch).

    Aber ich glaub mit ein bischen Überlegen wärst Du auch selber drauf gekommen.

  2. #22
    Neuer Benutzer Öfters hier
    Registriert seit
    30.11.2006
    Beiträge
    20
    Hallo ,

    Ich hab diesen Code geschrieben , am anfang gings mit dem PWM Signal aber jetzt kommt nur 0V von PD5 woran kann es liegen dh es gibt kein PWM signal mehr??

    MErci
    Code:
    #include <avr/io.h>
    #include <inttypes.h>
    #include <stdlib.h>
    
    
    
    
    
    
    #define F_CPU       4433618UL                       //Oscillator-frequenz in Hz
    #define BAUD        19200UL
    #define UBRR_BAUD   ((F_CPU/(16UL*BAUD))-1)
    
    
    /* LED */
    
    #define LED 4                                       //PIN 5 vom PORTA als LED nennen
    #define LED_ON PORTA |= (1 << LED )                 //PIN5 HIGH
    
    void init_led (void)
                        {
                          DDRA |= (1 << LED);         //PIN5 von DDRA als ausgang
                        }
    
    
    
    
    
    /* ADC */
    #define ADC_PIN 0                                      //PIN 0 vom PORTA als ADC nennen
    
    void adc_init(void) 
    {
    DDRA &= ~(1 << ADC_PIN);                               //PIN 0 vom PORTA als Eingang
    ADMUX = ADC_PIN;                                         //AD-Wandlerkanal 0 (ADC0) auswählen
    ADMUX |= (1<<REFS0);                              //AVCC als Referenzspannung
    ADCSRA = (1<<ADEN)|(1<<ADPS2)|(1<<ADPS0);        //AD-Wandler einschalten und Prescaler = 32 einstellen
    }
    
    #define start_a2d ADCSRA |= (1<<ADSC)              //Wandlung starten
    
    
    /* PWM */
    
    // PORT AND PIN CONFIGURATION
    
    
    #define PWM_PIN 5
    
    
    void pwm_init(void)
    {
        DDRD |= (1 << PWM_PIN);
    	// normale 10-bit Fast PWM aktivieren (nicht invertiert),
        TCCR1A = (1<<COM1A0)|(1<<WGM11)|(1<<WGM10);
    
        // Einstellen der PWM-Frequenz auf 4 kHz (Prescaler = 1024)
        TCCR1B = (1<< CS12)  | (1<<CS10) |(1<<WGM12);
    
        // Interrupts für Timer1 deaktivieren
        
        TIMSK &= ~0x3c;
    }
    
    
    
    int main(void) {
        uint16_t adc_result;
    	
    	uint16_t z;
    	uint32_t y;
        init_led();
    	adc_init();
    	pwm_init();
       
    
         while(1)
                  {
                    LED_ON;
    				start_a2d;
    				while ( !(ADCSRA & (1<<ADIF)));   //Warten bis die AD-Wandlung abgeschloßen ist
    				
    				adc_result = ADCL | (ADCH<<8) ;    //AD-Wert auslesen
    				
    				y = adc_result/1024 ;
    
    
    				z= ((y*1023)/716)*1024;
    				
    				OCR1A = z;
    		                 
    
                  }
    
    
     }

  3. #23
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.235
    Miss doch erst mal die Spannung die dein Temperaturfühler abgibt.
    Liegt die im zulässigen bereich sollte auch der A/D Wandler vernünftige Werte haben.
    Lade das Comparematchregister mit einem festen Wert z.B. 32000.
    Dann sollte eine PWM von ca. 50% rauskommen.
    Kommt nichts raus, stimmt entweder deine Initialisierung nicht, oder der Port D5 ist defekt. Dann solltest Du aber mal deine Beschaltung an dem Pin überprüfen.
    Wenn sich bei 32000 ein PWM Signal einstellt stimmt mit dem ADC Initialisierung, Hardware was nicht, oder in deiner Formel ist ein Fehler.

Seite 3 von 3 ErsteErste 123

Berechtigungen

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

LiFePO4 Speicher Test