Herbert K. schrieb:
> Mein Modul misst über den PA0 eine anliegende veränderbare Spannung
also den ADC Kanal 0
> Eigentlich wohl nicht schwer, meine C programmierkenntnisse sind leider
> mangelhaft :)
mangelhaft ist ein Hilfsausdruck.
Einem Baby den Schnuller klauen ist dagegen relativ schwer.
Was musst du machen:
erst mal den ADC initialisieren.
Dann musst du den Port, an dem die LED sitzt auf Ausgang schalten.
Sollte logisch sein.
Damit ist die Initialisierung abgeschlossen.
Ab dann geht es ständig in der Hauptschleife. Was ist dort zu tun?
Eine Messung vornehmen. Mit dem Schwellwert vergleichen und abängig vom
Ergebnis (kleiner/größer) die LED entweder ein oder ausschalten
Also
Das grundsätzliche Gerüst sieht so aus
1 | ....
|
2 |
|
3 | int main()
|
4 | {
|
5 | Initialisierungen
|
6 |
|
7 | while( 1 ) { // Hauptschleife
|
8 |
|
9 | Programmlogik
|
10 |
|
11 | }
|
12 | }
|
Was muss alles bei den Initialisierungen passieren?
Na, der ADC muss initialisiert werden - dazu hast du eine fertige
Funktion, brauchst du nur aufrufen. Vorher aber in der FUnktion die
Variante auswählen, die deiner gewünschten Referenzspannung entspricht.
Und der Port mit der Led muss auf Ausgang gestellt werden.
Was haben wir bisher
1 | ...
|
2 | int main()
|
3 | {
|
4 | POrt auf Ausgang stellen
|
5 | ADC_Init();
|
6 |
|
7 | while( 1 ) {
|
8 |
|
9 | ADC abfragen
|
10 | mit SChwellwert vergleichen
|
11 |
|
12 | größer -> LED einschalten
|
13 | kleiner -> LED ausschalten
|
14 | }
|
15 | }
|
gut. Die Portinitialisierung für die LED musst du alleine hinkriegen.
Was ist mit "ADC abfragen".
Auch dafür hast du bereits eine fertige Funktion, die du nur noch
verwenden musst. Und wie die Demo zeigt, brauchst du eine Variable, in
der du das Ergebnis der Abfrage bekommst.
Also
1 | ...
|
2 | int main()
|
3 | {
|
4 | uint16_t adcWert;
|
5 |
|
6 | POrt auf Ausgang stellen
|
7 | ADC_Init();
|
8 |
|
9 | while( 1 ) {
|
10 |
|
11 | adcWert = ADC_Read(0);
|
12 |
|
13 | mit SChwellwert vergleichen
|
14 | größer -> LED einschalten
|
15 | kleiner -> LED ausschalten
|
16 | }
|
17 | }
|
Wie vergleicht man Werte?
Na mit einem if!
1 | ...
|
2 | int main()
|
3 | {
|
4 | uint16_t adcWert;
|
5 |
|
6 | POrt auf Ausgang stellen
|
7 | ADC_Init();
|
8 |
|
9 | while( 1 ) {
|
10 |
|
11 | adcWert = ADC_Read(0);
|
12 |
|
13 | if( adcWert > 512 )
|
14 | LED einschalten
|
15 | else
|
16 | LED ausschalten
|
17 | }
|
18 | }
|
Den Rest musst du alleine hinbekommen.
> PS: Muss ich das eigentlich alles über den ADC machen oder reicht auch
> sonst der Analog Comparator? Ich mein ich hab ja nur eine Spannung die
> mit der internen Referzenspannung verglichen werden soll..
Nimm erst mal das, wofür du fertige Funktionen hast und was banal
einsetzbar ist. OK? So wie das aussieht, ist das schon schwer genug für
dich.