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.

Potistellung mit R8C/13 abfragen

Postby Guest » Wed May 30, 2007 12:00 am


Hallo

Ich habe mir ein einfaches Lauflicht gebastelt.
In bestimmten Zeitabständen wird immer ein anderer Ausgang logisch 1, so dass immer die nächste LED leuchtet.
Der Zeitabstand zwischen zwei Schritten wird durch eine Schleife festgelegt.


-----------------------------
long t;
long tmax;

void main(void)
{
tmax = 50; /* Ende der Schleife */

while (1) /* Schleife */
{
p1_0 = 1;
for (t=0; t p1_1 = 1; /* nächster Schritt */
for (t=0; t /* etc. */
}
}
-----------------------------


Ich verwende hier gleich mal den internen Oszillator, und so weit klappt alles bestens.

Nun möchte ich aber mit einem externen Poti die Lauflicht-Geschwindigkeit ändern. Ich dachte dabei an ein Poti, dass mit einem Ende an +5V und mit dem anderen Ende an Masse liegt. Je nach Stellung des Potis liegt am Schleifer eine entsprechende Spannung. Den Schleifer würde ich nun mit einem Eingang verbinden. Dieser Eingang müsste dann ständig abgefragt werden, welche Spannung denn gerade anliegt. Je nach höhe der Spannung ändert sich der maximale Wert der Schleife (tmax).
Der Wert "tmax" ist dann eben nicht auf "50" festgelegt, sondern von der Potistellung abhängig.

Frage:
Wie kann ich das anstellen, die Potistellung so auszuwerten um mein Vorhaben zu verwirklichen?

Ein paar Codezeilen wären hier sicher hilfreich, da ich als Anfänger ansonst nicht viel weiter kommen würde.


Vielen Dank !


mfg, Herby

Guest
 

Postby omega2 » Wed May 30, 2007 12:00 am

da musst du den wert des ad wandlers auslesen, beispiele gibt es dafür genug. (auch in meinem ist was) und diesen wertv evt noch multiplizieren oder so...
omega2
 
Posts: 127
Joined: Fri Jan 03, 2014 1:49 pm

Postby Guest » Wed May 30, 2007 12:00 am

Original von omega vom 20.12.2005 19:34:11
da musst du den wert des ad wandlers auslesen, beispiele gibt es dafür genug. (auch in meinem ist was) und diesen wertv evt noch multiplizieren oder so...





Na dass ist ja ne aussagekräftige Antwort

Na klar, "ad wandler auslesen" für einen Anfänger ist ja nun alles gesagt

Wo gibt es den die vielen Beispiele ?

Ach ja, es steht ja auch in deinem Beispiel - nur hat sich DEIN Beispiel bei mir noch nicht vorgestellt

Also: "Ich kenn dein Beispiel nicht!"



Uuuuupps - hat da jemand geantwortet, ohne dabei eine Antwort zu geben


Herby
Guest
 

Postby omega2 » Wed May 30, 2007 12:00 am

man..... guckst du hier: http://www.elektor.de/Default.aspx?tabid=115
omega2
 
Posts: 127
Joined: Fri Jan 03, 2014 1:49 pm

Postby Guest » Wed May 30, 2007 12:00 am


Hallo,

nun habe ich zwar dein Beispiel gefunden, kann es aber nicht herunterladen - kommt immer eine Fehlermeldung.

So manch anderes Beispiel konnte ich mir allerdings ansehen. Leider verstehe ich den Inhalt dabei nicht so ganz. Als Anfänger verliert man hier eben leicht den Überblick.
Meine Frage ist damit also nicht beantwortet. Ich würde da schon ein paar "extra" Codezeilen benötigen, die mir das auslesen des AD-Wandlers und das weitere Vorgehen erleutern.

Vielleicht findet sich ja noch jemand, der es mir auch verständlich machen kann - nicht nur sagt "da gibt es viele Beispiele dazu ..." und den Rest kann ich mir dann denken ...


Hoffe auf Hilfe !



mfg, Herby
Guest
 

Postby eroeben » Wed May 30, 2007 12:00 am

Hallo.
Guck mal ob du hier mit etwas anfangen kannst:

adcon0 = 0x80; //CKS0 = 1:Taktfrequenz halbiert, An0 an Pin 24 angewält
adcon1 = 0x28; //Vref ein,CKS0 abgewält:volle Taktfrequenz,10bit-Mode
adcon2 = 0x01; //mit sample&hold

while(1)
{

adst = 1; //Start conversion
while(adst == 1){} //warten auf conversion's Ende

wert = ad //AD_wert zuweisen
}
eroeben
 
Posts: 30
Joined: Fri Jan 03, 2014 1:49 pm

Postby apokorny » Wed May 30, 2007 12:00 am

Auch Anfängern wird geholfen

Der Wert des ad Registers liegt dann immer zwischen 00h und FFh! jetzt könntest Du hingehen und diesen Wert entweder einfach multiplizieren um einen vernünftigen Wert für dem Timer zu erhalten oder Du baust eine Werte Tabelle aufbauen, z.B. so:

Wenn 00h < ad < 32h = Schleifenzeit 1
Wenn 32h < ad < 64h = Schleifenzeit 2
Wenn 64h < ad < 96h = Schleifenzeit 3
Wenn 96h < ad < C8h = Schleifenzeit 4
Wenn C8h < ad < FFh = Schleifenzeit 5
Auf dies Art kannst Du beliebig viele Stufen einführen, wenn man aber lieber einen linearen Verlauf haben möchte musst Du dir einen Formel überlegen die das ad Ergebnis umwandelt und denn dem Timer als Wert zuweist.

Gruß Alex
apokorny
 
Posts: 122
Joined: Fri Jan 03, 2014 1:49 pm

Postby eroeben » Wed May 30, 2007 12:00 am

Frage:
Im 10Bit Modus sinds dann aber doch 1024d und nicht 256(FFh), oder?
eroeben
 
Posts: 30
Joined: Fri Jan 03, 2014 1:49 pm

Postby omega2 » Wed May 30, 2007 12:00 am

ja du hast bei 10 bit bis 1024 aber du kannstdas ergebnis mit /4 durch 4 teilen und erhältst ein 8 bit ergebnis.
P.S: Warum ist eigentlich mein Programm schonwieder falsch verlinkt.
omega2
 
Posts: 127
Joined: Fri Jan 03, 2014 1:49 pm

Postby Guest » Wed May 30, 2007 12:00 am


Hallo eroeben


Ja, damit kann ich etwas anfangen.

Verstehe zwar noch immer nicht wie das ganze funzt, aber mein Lauflicht lässt sich nun mit einem Poti in seiner Geschwindigkeit ändern.

Alles weitere muss ich erst rausfinden.


Vielen Dank !!!


mfg, Herby
Guest
 


Return to Das R8C-Projekt

Who is online

Users browsing this forum: No registered users and 1 guest