[C] PWM für Ladungspumpe, Versatz realisieren?

Gast #3753455
Lesenswert?

Hallo Leute,

ich bin gerade dabei eine Ladungspumpe mit Timer1 eines Atmega32 zu 
realisieren.

Der Timer 1 läuft im 8 Bit Mode mit Fast PWM und der Channel B ist 
invertiert, Prescaler ist 1 und  die Frequenz beträgt ca 32kHz.

Auf dem Oszi sieht das auch alles ganz gut aus. Allerdings habe ich ein 
Problem:

Beide PWMs haben zum gleichen Zeitpunkt eine steigende Flanke.
Laut Wikipedia sollte aber ein kleiner Versatz drin sein.
http://de.wikipedia.org/wiki/Ladungspumpe#mediaviewer/Datei:Dickson_voltage_multiplier.svg


Der Kollege hier hat das mit einem Arduino ebenfalls so gemacht, aber 
bei ihm sieht man schön den Versatz (8:43)

http://www.youtube.com/watch?v=D826h-YQun4&index=2&list=PLjzGSu1yGFjUsB3ChZJ2_-MTNp7bHaKED

Jetzt ist die Frage, wie bekomme ich sowas auch hin?

Danke für eure Hilfe
Angehängte Dateien:
Gast #3753464
Lesenswert?

1
#include  <avr\io.h>  //AVR Register und Konstantendefinitionen
2
#include  <avr\interrupt.h> //AVR Interrupt Vektoren
3
#include  <stdlib.h>
4
#include  <inttypes.h>
5
#include   <util/delay.h>
6

7

8

9
              
10
// ************************************************************************************************ 
11
//                       Initialisierung          
12
// ************************************************************************************************ 
13
void initial(void)
14
{    
15
// **** Einrichten von Ein- und Ausgängen ******************************************************* 
16
DDRD = 0xff;        // PortD Ausgänge 
17
DDRC = 0x00;        // PortC Eingänge 
18

19
// **** Einrichten von PWM Betrieb *************************************************************** 
20
// Der Timer 1 wird im Fast PWM Modus betrieben
21

22

23
TCCR1A = 0b10110001;          //8 bit PWM, no Prescale, Channel B invertiert
24
TCCR1B = 0b00001001;
25

26

27

28
         
29
OCR1A=127;
30
OCR1B=137;
31
TCNT1H = 0 ;     
32
TCNT1L = 0 ; 
33

34
sei() ;
35

36
}
37

38
//Hauptprogramm
39

40
int main(void)
41
{
42

43

44
initial();  // Initialisierung Ports etc.
45

46
    
47
while(1)
48
  
49
{
50

51

52

53

54
return 0;
55
}
Gast #3753467
Lesenswert?

#include  <avr\io.h>  //AVR Register und Konstantendefinitionen
#include  <avr\interrupt.h> //AVR Interrupt Vektoren
#include  <stdlib.h>
#include  <inttypes.h>
#include   <util/delay.h>




//
************************************************************************
************************
//                       Initialisierung
//
************************************************************************
************************
void initial(void)
{
// **** Einrichten von Ein- und Ausgängen
*******************************************************
DDRD = 0xff;        // PortD Ausgänge
DDRC = 0x00;        // PortC Eingänge

// **** Einrichten von PWM Betrieb
***************************************************************
// Der Timer 1 wird im Fast PWM Modus betrieben


TCCR1A = 0b10110001;          //8 bit PWM, no Prescale, Channel B
invertiert
TCCR1B = 0b00001001;




OCR1A=127;
OCR1B=137;
TCNT1H = 0 ;
TCNT1L = 0 ;

sei() ;

}

//Hauptprogramm

int main(void)
{
initial();  // Initialisierung Ports etc.
while(1){}
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren