Hallo C-Kollegen,
ich möchte gerne die Verstärkungsfunktion des ADC nutzen.
Ich verwende einen AT90Can128 und programmiere in C.
Benutzen will ich ADC2 und ADC3, vorerst mal mit 1facher Verstärkung.
Kann ich auch als Referenzspannung 5V nehmen oder muss es 2,56V sein?
Wird das Ergebniss anders berechnet als beim normalen ADC?
Hier ist mein Code. ich weiß nicht ob die Initialisierungen des ADC alle
korrekt sind. Vielleicht seht ihr ja gleich den Fehler.
1
// Hier die Variablen definieren, die im Programm verwendet werden sollen
>Vielleicht seht ihr ja gleich den Fehler.
Der sich wie äußert?
> UCSR0B |= ((1<<RXCIE0) | (1<<RXEN0) | (1<<TXEN0));
Interrupt freigeben ohne Interruptroutine ist schon mal
ganz schlecht.
ja, ich habe ja alles unnötige aus dem sichtbarem code entfert um nicht
zu verwirren, das wird nicht benötigt.
aber es gibt eine Uart-interrupt-routine
hier nochmal der code
1
// Include Dateien erweitern den Sprachumfang von C
2
#include"global.h" // include our global settings
3
#include"lcd.h" // Unterstützung für LCD-Anzeige
4
#include"adc.h" // include printf function library
5
#include"delay.h"
6
#include"compat/deprecated.h"
7
#include"eeprom.h"
8
#include"uart.h"
9
#include"rprintf.h"
10
#include"stdio.h"
11
#include"stdlib.h"
12
#include"interrupt.h"
13
#include"dac8512.h"
14
#include"string.h"
15
16
17
// Hier die Variablen definieren, die im Programm verwendet werden sollen
Hab jetzt nicht genau nachgeschaut, aber lass das zusammenbasteln des
ADC Wertes sein. Nimm "ADC" (oder ADCW?). Da ist das bereits auf
Compilerebene erledigt.
Die Initkonstanten sind leider als nichtssagende Bit-Konstanten
ausgeführt, statt mit Bitnamen.
Wie sieht die Beschaltung aus?
while((ADCSRA&(1<<ADSC))!=0){}//Warten bis konvertierung beendet
69
70
// Das sollte 25 ADC-Zyklen dauern!
71
72
// also 1/4608 s
73
74
75
76
77
78
79
result=ADCW;// Ergebnis zusammenbauen
80
81
rprintf("\r\nErgebniss: %d",result);
82
spannung=(2560/512.0)*result;
83
rprintf("\r\nSpannung: %d mV",spannung);
84
85
_delay_ms(500);
86
}// Ende Endlosschleife
87
}// Ende von main
habt ihr nicht so etwas wie ein Beispiel für mich für die Einstellungen
Momentan existiert eig keine Beschaltung ich hab an den Adc2 ein
Netzteil gehängt und an den ADC3 auch eins, beide mit GND verbunden und
stelle hier meine spannungen ein.
Da es sich nur um einen Versuch zu Hause handelt und die Schaltung
selber sich in der Arbeit befindet :)
aber es sollte ja auch so gehen
Martin 567 schrieb:> adc_init(0b00001100); // ADC, Kanal 2 aktivieren
Hierzu fehlt der Code - es ist unbekannt, was adc_init macht.
Möglicherweise macht es etwas, was durch
nicht rückgängig gemacht wird, denn bei beiden wird verodert. Wenn Du
willst, dass genau dieser Wert drinsteht (wie es bei einer
Initialisierung üblicherweise der Fall ist), solltest Du besser nicht
verodern, sondern direkt zuweisen.