- 3D-Druck Einstieg und Tipps         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 16 von 16

Thema: PWM Attiny25

  1. #11
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo

    Auch das Datenblatt scheint das Register OCRA nicht zu kennen. In der Beschreibung des Modi (Seite 76) heist es:

    TOP is defined as 0xFF when WGM2:0 = 1, and OCR0A when WGM2:0 = 5.
    In der Mode-Tabelle auf Seite 82 steht aber bei Mode 5 eindeutig Top=OCRA.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  2. #12
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2009
    Beiträge
    103
    Hallo zusammen!

    Danke für die Postings!

    Die Attinys25 sind bereits wieder in der Transportverpackung und der Atmega32 ist in Gebrauch.

    Das Datenblatt des Attiny25 ist nicht das einzige mit Ungereimtheiten:

    http://www.datasheetcatalog.com/data.../7/BD179.shtml

    Der maximale Basisstrom des BD179 wird hier sowohl mit 1 als auch mit 7 Ampere angegeben, dies bei einem maximalen Kollektorstrom von 3 Ampere. Die 7 A habe ich nicht getestet.

    mfg
    Walter

  3. #13
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    25.04.2010
    Beiträge
    1.249
    Hi

    Der Strom wird im Datanblatt auch noch von anderen Faktoren abhängig gemacht.

    Zum Controller:
    Mit dem ATtiny25 scheinst nicht nur du probleme zu haben. Ich selber habe nie einen benutzt, wird auch nicht passieren...
    Aber bevor es jetzt ein ATmega32 ist, benutz doch nen ATmega8, der wäre nicht so extrem überdimensioniert und PWM ist damit auch sehr einfach umzusetzen.

  4. #14
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    09.08.2009
    Beiträge
    103
    Danke für den Tipp.

    Hatte mit dem Attiny25 u.a. vor, im Frühjahr eine Solarlüftungssteuerung mit 3x Analogeingang und 2x PWM-Ausgang zu bauen.

    Nun wird es wahrscheinlich dafür ein Attiny24 mit 14 Pins werden.

    Die Sache mit dem Elektromagneten werde ich mit dem überdimensionieren Atmega32 weiterverfolgen und gegen Ende einen passenden Kontroller lt. Dateblatt auswählen.

  5. #15
    Erfahrener Benutzer Robotik Visionär Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    36
    Beiträge
    5.070
    Ich habe bei einem Attiny 45 auch Probleme (ist der gleiche nur mit mehr Flash). Wollte nur einen Analogwert einlesen und damit den PWM Kanal ansteuern. hat nicht funktioniert bis ich beim Analogkanal den Prescaler geändert habe. Zuerst habe ich den Prescaler so belassen (der Prescaler sollte laut DB 2 betragen). Jetzt habe ich den Prescaler auf 16. Das Komische daran war, dass er immer in die Interruptroutine eingestiegen ist, aber die PWM hat sich nicht geändert. Hier habe ich das Programm. Funktioniert auf einem Attiny 45.

    Code:
    #include <avr/interrupt.h>
    #include <util/delay.h>
    
    volatile unsigned int adc_value, adc_min, i;
    
    ISR(ADC_vect)
    {
    	adc_value = ADCH;
    	PORTB ^= (1<<PB1);
    }
    
    int main(void)
    {
    	PORTB |= (1<<PB3)|(1<<PB4);
    
    	DDRB |= (1<<PB0)|(1<<PB1);
    
    	ADMUX = (1<<REFS1)|(1<<ADLAR)|(1<<MUX0);
    
    	ADCSRA = (1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2);
    
    	TCCR0A |= (1<<WGM00)|(1<<WGM01)|(1<<COM0A1)|(1<<COM0A0);
    
    	TCCR0B |= (1<<CS02);
    
    	sei();
    
    	while(1)
    	{
    		ADCSRA |= (1<<ADSC);
    		adc_value = 255 - adc_value;
    		OCR0A = adc_value;
    		_delay_ms(100);
    	}
    }
    MfG Hannes

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    30.09.2006
    Beiträge
    734
    Ich habe keine Probleme mit dem attiny25. Sowohl mit timer0 als auch mit timer1.

    Welchen Sinn hat eine CTC mode mit OCR0A als top und PWM? Genau, keinen.

    void initTimer1(void){
    //cs13:cs10 = 0010 for 125kHz
    //cs13:cs10 = 0001 for 250kHz
    //TCCR1 |= (1<<CTC1); // Clear timer/counter on compare match
    TCCR1 |= (1<<PWM1A); // Pulse width modulator A enable
    TCCR1 |= (1<<COM1A1); // comparator A mode select, 01 here
    //TCCR1 |= (1<<COM1A0);

    //TCCR1 |= (1<<CS13); // clock select, prescaler
    //TCCR1 |= (1<<CS12); // 125kHz
    TCCR1 |= (1<<CS11);
    //TCCR1 |= (1<<CS10);

    GTCCR = 0;
    GTCCR |= (1<<PWM1B); // enable PWM B
    GTCCR |= (1<<COM1B1); // comparator B mode select
    //GTTCR |= (1<<COM1B0); // 10 = clear on compare match
    //GTTCR |= (1<<FOC1B); // force output compare match
    //GTTCR |= (1<<FOC1A); // force output compare match
    //GTTCR |= (1<<PSR1); // Reset the prescaler

    OCR1A = 0;
    OCR1B = 0;
    OCR1C = 255; // maximum value for pwm
    //TIMSK |= (1<<OCIE1A); // Output compare match a interrupt enable
    PLLCSR |= (1<<PLLE); // enable PLL before enabling it as source for timer1
    _delay_us(1); // wait 100us for pll to stabilize
    PLLCSR |= (1<<LSM); // low speed mode

    // lock detection
    // Blocks until lock is detected, i.e. PLOCK = 1
    while(!(PLLCSR & (1<<PLOCK)))
    ;

    PLLCSR |= (1<<PCKE); // enable PLL as timer1 clock source

    // init dead times
    //DTPS1 |= (1<<DTPS11); // dead time prescaler
    //DTPS1 |= (1<<DTPS10); // 00 = 1, 11 = 8
    /*
    // amount of dead cycles coded in binary
    DT1A |= (1<<DT1AH3);
    DT1A |= (1<<DT1AH2);
    DT1A |= (1<<DT1AH1);
    DT1A |= (1<<DT1AH0);
    DT1A |= (1<<DT1AL3);
    DT1A |= (1<<DT1AL2);
    DT1A |= (1<<DT1AL1);
    DT1A |= (1<<DT1AL0);
    */
    }

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

12V Akku bauen