INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
AD-Wandler --> PWM
03.02.2014, 14:17
Beitrag #1
AD-Wandler --> PWM
Hallo alle zusammen,Blush

ich bin noch nicht allzu vertraut mit dem Programmieren und komme bei meiner Facharbeit nicht mehr weiter.
Wir entwerfen einen digitalen Klasse D Verstärker, und meine Aufgabe ist es, die Daten von einem 16Bit AD-Wander (AD977) einzulesen und diese sollen dann den Duty Cycle der PWM bestimmen. Leider übernimmt dieser Wert die Daten nicht. Huh
Kann mir jemand einen Tipp geben?

Hier ist der Programmcode vom ADW/SPI:

#include "SPI.h"
int ss = 10;
#define DATAOUT 11//MOSI
#define DATAIN 12//MISO
#define SPICLOCK 13//sck, PORTB5

void setup_spi()
{
pinMode(DATAOUT, OUTPUT);
pinMode(DATAIN, INPUT);
pinMode(SPICLOCK, OUTPUT);
pinMode(ss, OUTPUT);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE1);
SPI.setClockDivider(SPI_CLOCK_DIV8);
}

int16_t read_ADC()
{
digitalWrite(ss, LOW);
byte read_command;
SPI.transfer(read_command);
int8_t a = SPI.transfer(0xa0);
int8_t b = SPI.transfer(0xa0);
SPDR = (a << 8) + b;
digitalWrite(ss, HIGH);
return SPDR;
}


hier von der PWM:


#define PWM1 6
#define PWM2 3
#include <TimerOne.h>

int enc = 100;
void setup_pwm()
{
pinMode(PWM1, OUTPUT);
pinMode(PWM2, OUTPUT);

Timer1.attachInterrupt(isr,500); //alle 23µs

//für PWM
TCCR0A = _BV(COM0A1) | _BV(COM0B1) | _BV(WGM01) | _BV(WGM00);
TCCR0B = _BV(CS00); //no prescaling

//TCCR1A=0b10100000;
//TCCR1B=0b00001100;//256

TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS20); //no prescaling
sei();

}

void isr()
{
OCR0A = (char)(data<<8);
OCR2A = (char)data;//(char)data;
OCR2B = (char)data;
}


und hier das Hauptfile:

int16_t data;

void setup()
{
Serial.begin(9600);
setup_pwm();
setup_spi();
}

void loop()
{
data = read_ADC();
}


Wäre um jeden Tipp froh.
Im Anhang ist noch das Datenblatt vom AD-Wandler.

Liebe Grüße
Alina
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Wink Wie programmiere ich ein externen AD-Wandler Andreas_h 24 7.753 23.04.2014 19:04
Letzter Beitrag: Andreas_h

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste