Hallo,
kann man beim RP6v2 einen Schalter an den ADC0 bzw ADC1 Kanal anbringen?
Wenn ja muss der schalter zwischen GND und Signal oder zwischen VDD und Signal?
Danke im Vorraus
Druckbare Version
Hallo,
kann man beim RP6v2 einen Schalter an den ADC0 bzw ADC1 Kanal anbringen?
Wenn ja muss der schalter zwischen GND und Signal oder zwischen VDD und Signal?
Danke im Vorraus
Ich weiß zwar nicht, wie es beim RP6v2 ist, aber üblicherweise werden Taster/Schalter so an einen Controller angeschlossen:
Anhang 26088
Theoretisch haben die meisten Controller zwar auch interne Pull-Up-Widerstände, jedoch verwendet man in der Praxis üblicherweise externe hierfür. Die ADC-Eingänge können dabei üblicherweise als "normale" I/O-Pins konfiguriert werden
Ok, also würde es dann heißen das wenn ich den schalter schließe masse am PIN für das Signal anliegt? Für was muss dann noch en widerstand dazu?
Weil der Anschluss bei geöffnetem Schalter sonst "in der Luft hängen" würde ... sprich keinen definierten Zustand hätte. Ein paar Infos hierzu findest Du z. B. auch hier: http://www.rn-wissen.de/index.php/Pu...own_Widerstand
Bei der gezeigten Schaltung ist es so, dass der Eingang definitiv auf HIGH ist, wenn der Taster geöffnet ist bzw. LOW, wenn der Taster gedrückt wird. Wenn Du das ganze anders herum haben willst, dann geht das auch, allerdings spricht man dann nicht von einem Pull-Up-Widerstand sondern von einem Pull-Down-Widerstand, da er den Eingang auf Masse "zieht". Üblich sind aber wie gesagt externe Pull-Up-Widerstände.
Ok,
danke schonmal für die Hilfe.
Ich hab mir jetzt mal ein kleines Programm geschrieben in dem ich ADC0 und ADC1 auslesen kann und die werte über den RobotLoader im Terminal angezeigt werden.
Dann habe ich mir diese Schaltung mit einem 10 Kiloohm widerstand nachgebaut.
Eine sache die ich jetzt noch festgestellt hab:
wenn ich diese Schaltung an ADC1 anschließe änder sich auch nur hier der wert! Wenn ich jedoch diese Schaltung an ADC0 anschließe ändert sich der wert bei ADC1 und bei ADC0, es wird jeweils der gleiche wert angezeigt.
Ist das normal?
eigentlich nicht. Du solltest auch versuchen den AD-Wandler abzuschalten und die Pins als ganz normale Digital-I/O-Anschlüsse zu verwenden. Wenn Du vollen Zugriff auf den Controller hast, ist das möglich. Leider kenne ich den RP6v2 aber wie gesagt nicht und kann Dir deshalb auch nicht sagen, ob und wenn ja wie das geht. Da müssen die RP6v2-Experten ran ;-)
Bei den ATmegas kann man (fast) alle I/O-Pins für als Ein- oder Ausgang konfigurieren, wie von redround geschrieben. Damit sind Schalterabfragen ohne Problem möglich. Wenn nötig oder wünschenswert kann man praktischerweise an einem ADC-Pin auch mehrere Taster gleichzeitig anbringen. Dazu wird eine Widerstandskombination verwendet, sodass abhängig vom aktivierten Taster/Schalter eine jeweis unterschiedliche Spannung am ADC ansteht.Zitat:
... kann man beim RP6v2 einen Schalter an den ADC0 bzw ADC1 Kanal anbringen ...
Zitat:
Zitat von ATmega32-32L-Datenblatt 2503Q, Seite 4
Also die von mir bevorzugten AVR-8-Bit-Controller (die im RP6v2 auch eingesetzt werden) haben interne Pull-Ups nicht theoretisch sondern ganz konkret vorhanden und benutzbar! Das Datenblatt (für meinen mega1284, auch für den mega32 und andere) spezifiziert sie zwischen 20 kΩ und 50 kΩ. Deshalb verstehe ich nicht, dass Du von einem üblichen Anschlußbild mit externen Pull-Up-Widerständen schreibst. So einen Aufwand hatte ich noch nie gemacht. Wo ist das üblich?
Hallo
"Ich hab mir jetzt mal ein kleines Programm geschrieben" ...dass du uns vielleicht auch zeigen solltest.
"Ist das normal? " Nein, denn ADC0 und ADC1 sind nicht verbunden.
Gruß
mic
Das Problem ist wohl, dass die Störfestigkeit mit steigendem Widerstand abnimmt. So wird die Schaltung z. B. empfindlicher gegen sog. "Kriechstrecken", die zum Beispiel bei Verschmutzungen der Schaltkontakte auftreten können, je größer der Widerstand ist. Auch sog. "parasitäre Leitungskapazitäten" - besonders bei langen Leitungen - sind eher ein Problem je höher der Pullup-Widerstand ist. Deshalb haben sich in der Praxis wohl Werte zwischen 5 und 10 kOhm für die Widerstände als "sichere" Größen erwiesen ... und da liegen die internen Widerstände zum Teil einfach deutlich drüber (abhängig vom Controller-Typ bis zu 100k)
So hab hier mal den Code den ich zum auslesen der werte geschrieben habe:
#include "RP6RobotBaseLib.h"
int main(void)
{
initRobotBase();
startStopwatch1();
while(true)
{
if(getStopwatch1() > 300)
{
writeString_P("\nADC Akku: ");
writeInteger(adcBat, DEC);
writeString_P("\nADC ADC0 ");
writeInteger(adc0, DEC);
writeString_P("\nADC ADC1: ");
writeInteger(adc1, DEC);
writeChar('\n');
setStopwatch1(0);
}
task_ADC();
}
return 0;
}