Das Elektor-Forum schließt seine Pforten (siehe auch http://www.elektormagazine.de/forum). Ab Freitag, den 01. März, ist es nicht mehr möglich, sich im Forum einzuloggen. Alle Inhalte des Forums bleiben jedoch bis Ende März noch sichtbar. Am 01. April wird das Forum schließlich komplett geschlossen.

R8C AD-Wandler Frage

Postby rixa-m » Mon May 11, 2009 12:00 am

Hallo,
ich bin absoluter uC Neuling,und mir ist jetzt ein elektor Board mit dem R8C in die Hände gefallen. Tolle Sache - gleich ausprobiert. Ich habe das in der Elektor abgedruckte Programm zur AD-Wandlung modifiziert, um alle 12 Channels zu messen. Dazu habe ich zwei Routinen:
unsigned int ad_in(unsigned char ch)
{
adcon0 = 0x80+ch;// Port 0 einschalten
adgsel0 = 0;
adcon1 = 0x28;// 10 Bit AD-Wandler Modus
adst = 1;// start conv.
while (adst==1)// warten bis fertig
{
return ad;// wert ausgeben
}
}

unsigned int ad_in2(unsigned char ch)
{
adcon0 = 0x90+ch; //Port P1 group
pd1_0 = 0; // AN8 input
pd1_1 = 0; // AN9 input
pd1_2 = 0; // AN10 input
pd1_3 = 0; // AN11 input
pu02 = 0;
adgsel0 = 1;
adcon1 = 0x28; //10-bit mode
adst = 1; //Conversion start
while(adst == 1) //Wait A/D conversion
{
return ad; //AD value
}
}

..die dann so aufgerufen werden:

void voltmeter(int port)
{
float u;
unsigned char c;
u = (float) ad_in(port);// AD-Port verwenden
u = u / 1023.0 * 5.0;
c = u;
comport_senden(port+0x41);// Portnummer in Großbuchst. senden
comport_senden(0x3A);// Doppelpunkt senden
comport_senden(c+48);// Vor dem Komma
comport_senden (0x2c);// Komma senden
u = u - c;
u = u * 10;
c = u;
comport_senden (c+48);// 1.Stelle nach dem Komma senden
u = u - c;
u = u * 10;
c = u;
comport_senden (c+48);// 2 Nachkommastelle senden
}
void voltmeter2(int port)
{
float u;
unsigned char c;
u = (float) ad_in(port2);// AD-Port verwenden
u = u / 1023.0 * 5.0;
c = u;
comport_senden(port+0x41);// Portnummer in Großbuchst. senden
comport_senden(0x3A);// Doppelpunkt senden
comport_senden(c+48);// Vor dem Komma
comport_senden (0x2c);// Komma senden
u = u - c;
u = u * 10;
c = u;
comport_senden (c+48);// 1.Stelle nach dem Komma senden
u = u - c;
u = u * 10;
c = u;
comport_senden (c+48);// 2 Nachkommastelle senden
}

Durch die Buchstaben kann ich dann die Werte zu den Ports zuordnen, was besseres ist mir nich eingefallen.
... Im Hauptprogramm dann mit Voltmeter(0)..(7)..usw. und Voltmeter2(4) ...(7)
und hier beginnen meine Fragen.
Voltmeter läuft so, wie es soll.
Aber Voltmeter2 macht nix. Liefert nur zufällige Werte, als ob die Ports "in der Luft" hängen.
Ich hab schon viel rumprobiert, aber ich komm nich drauf. Was mache ich falsch ? Wäre um einenTip sehr dankbar.
rixa-m
 
Posts: 5
Joined: Fri Jan 03, 2014 1:52 pm

Postby 021aet04 » Tue May 12, 2009 12:00 am

Warum hast du in der ersten Zeile von "unsigned int ad_in2(unsigned char ch)"
adcon0 = 0x90+ch; //Port P1 group

geschrieben? Habe das Datenblatt nicht hier. Aber könnte es sein, dass das
adcon0 = 0x80+ch; //Port P1 group
heißen sollte?
021aet04
 
Posts: 58
Joined: Fri Jan 03, 2014 1:48 pm

Postby rixa-m » Tue May 12, 2009 12:00 am

Hallo,
danke für Deine Antwort. Nee, ich hab das so verstanden, dass
adcon0 = 0x80+ch; Port 0 und
adcon0 = 0x90+ch; Port 1 ist, weil das Bit adgsel0 bei ad_in2 auch auf I gesetzt ist. ich habe die Seite mal mit rangehängt.
Hab ich auch schon probiert:
adcon0 = 0x80+ch; // und dann mit
adgsel0 = I; // Port 1 anwählen.
Brachte auch nix.

Viele Grüße Rixa M
Attachments
R8C13-DATASHEET137.PDF
(339.64 KiB) Downloaded 29 times
rixa-m
 
Posts: 5
Joined: Fri Jan 03, 2014 1:52 pm

Postby 021aet04 » Tue May 12, 2009 12:00 am

Du hast recht sollte 0x90 sein
021aet04
 
Posts: 58
Joined: Fri Jan 03, 2014 1:48 pm

Postby krausssn » Thu Jun 11, 2009 12:00 am

Hallo, Rixa-M,

Voltmeter() funktioniert, Voltmeter2() aber nicht?!

Schau mal nach dieser Zeile in Voltmeter2():

u = (float) ad_in(port2);// AD-Port verwenden

Hier wird die Variable port2 verwendet, als Parameter übergibst du aber port. Und port verwendest du auch im weiteren Kontext. Vermutlich gibt es bei dir im Programm drumherum ein port2, sonst würde der Compiler meckern. Und hier wird halt irgend etwas im Wald gemessen. Kurz: in der Zeile müsste es port statt port2 heißen.

Grüße
Stefan
krausssn
 
Posts: 1
Joined: Fri Jan 03, 2014 1:52 pm


Return to Das R8C-Projekt

Who is online

Users browsing this forum: No registered users and 1 guest