Archiv verlassen und diese Seite im Standarddesign anzeigen : ldr am digital-port (gelößt)
hi
da mein analog port leider aus irgendwelchen gründen defekt ist (oder ich bin einfach zu dumm^^) muss nun irgendwie einen ldr an die digital ports anschließen :-k . die frage ist nun wie das geht.ich könnte mir zb vorstellen das iwie mit nem kondnsator zu machen so dass je nach ldr widerstand sich die frequenz des signals am digital pin erhört
mehr verstehe ich aber nicht von elektronik^^
hoffentlich könnt ihr mir beim erstellen einer schaltung helfen..
tobi
Besserwessi
08.05.2010, 15:54
So leicht geht ein Analoger Eingang nicht kaput. Das ist dann meist der ganze Chip hinüber. Das wird also mehr ein Problem der Programmierung sein.
Man kann sich an einem digitalen Einganag helfen, wie schon vermutet mit einem Kondesator. der LDR und Konensator Bilden ein RC glied und die Verzögerung hängt dann von LDR (Licht) ab. Die schaltung könnte z.B. ein Kondensator gegen Masse (z.B. 1 nF), und der LDR gegen Vcc. Gemessen wird dann die Zeit von Umschalten von Ausgang Low auf Eingang, bis an Eingang ein High erkannt wird.
und wo würde ich dann den pin anschließen ?? (in der mitte zwischen ldr u. kondensator?)
könnte mir vielleicht einer ein code beispiel geben ich hab e das mit dem auswerten noch nicht verstanden
tobi
na dann erzähl uns doch noch etwas mehr sonst wird das nur sinloses gerate
von was ist der digitalport bzw der analog port von einem computer oder mikrokontroler( von welchem?)
welche programiersprache
und dein code mit dem du es probiert hast
nflatjor555
08.05.2010, 23:39
I/O-Pin in der Mitte, so wie du geschrieben hast.
Zur Code: ich kann ein Versuch in Pseudocode machen.
Am geschicktesten machst du die Zeitmessung mit einem Timer, aber zur Verstaendnis wie folgt:
Pin=Output, Low
// lass eine Zeit vergehen um den Kondensator zu entladen
Pin=Input
Counter=0
while (Pin == Low)
{
Counter++
Delay_us(10) // 10us ist ein Beispiel, muss ausprobiert werden
}
// wenn wir hierher kommen, ist der Kondensator aufgeladen worden (Pin=High)
if (Counter > 100) // 100 counts ist auch nur ein Beispielswert
//Dunkel
else
//Hell
vielen dank wie schon richtig erraten benutzte ich c im avrstudio 4 mit einem atmega 32.
ich weiß nicht genau was du mit
und dein code mit dem du es probiert hast gemeint hast außer du meinst den code um den analog port auszulesen:
stammt nicht von mir:
uint16_t readADC(uint8_t channel) {
uint8_t i;
uint16_t result = 0;
// Den ADC aktivieren und Teilungsfaktor auf 64 stellen
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1);
// Kanal des Multiplexers waehlen
// Interne Referenzspannung verwenden (also 2,56 V)
ADMUX = channel | (1<<REFS1) | (1<<REFS0);
// Den ADC initialisieren und einen sog. Dummyreadout machen
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC));
// Jetzt 3x die analoge Spannung and Kanal channel auslesen
// und dann Durchschnittswert ausrechnen.
for(i=0; i<3; i++) {
// Eine Wandlung
ADCSRA |= (1<<ADSC);
// Auf Ergebnis warten...
while(ADCSRA & (1<<ADSC));
result += ADCW;
}
// ADC wieder deaktivieren
ADCSRA &= ~(1<<ADEN);
result /= 3;
return result;
}
tobi
wie sah der wert aus der zurück gegeben wurde?
und wie sah die externe beschaltung aus?
ja ich wollte mal den code sehen, weil da schon die meisten fehler auftauchen und der rest der fehler bei der beschaltung. Und das unwahrscheinlichste ist, dass du den gesammten adc teil kaputt gemacht hast
also als ergebni bekam ich konstant 1022
bei einer beschaltung
https://www.roboternetz.de/phpBB2/files/adc.pdf
allerdings ohne den kondensator
zwischen durch bekam ich auch mal bei shr hellem licht 571
und zwischen drin 572 bei dunkelm raus opder so ähnlich
ich hatte dazu auch schon ein thema aufgemacht:
https://www.roboternetz.de/phpBB2/viewtopic.php?t=52801
tobi
ok das klingt aber stark nach einem nicht kaputten adc
hast du ein poti? wenn ja stell mit dem mal langsam alle möglichen spannungen ein und seh dir die werte an und die ref spannung nimmst du besser 5V.
von 5 auf oder abwärts?
EDIT: es geht grad schlecht das auszuprobieren (https://www.roboternetz.de/phpBB2/viewtopic.php?t=54214) aber ansonsten erstam danke!
so es geht wieder alles \:D/
aber nicht die messung ;)
mein aufbau sieht so aus:
|----LDR----|----kondensator(10µf)---|
|................|................................ ......|
|vcc...........|port c pin 7.....................|gnd
mein code sieht so aus:
int Counter;
waitms(1000);
char result[10];
DDRD |= 0xB0;
setportdon(7);
waitms(1000);
DDRD |= 0x30;
Counter=0;
while (!(PIND & (1 << PD7)))
{
Counter++;
_delay_us(10);
}
snprintf (result, (size_t)10, "%d", Counter);
lcd_clrscr();
waitms(1000);
lcd_puts(result);
also pasiern soll folgendes:
Kondensator entleeren portc7 auf low als output
dann als input warten bis spannung anliegt (kondensator voll)
dann die benötigte zeit am lcd ausgeben
aber es kommt immer '0' raus
was mach ich falsch???
Besserwessi
12.05.2010, 22:49
mit
DDRD |= 0x30;
werden nur Bits gesetzt, aber keine gelöscht. PD7 bleibt also immer als Ausgang.
Zum entladen des Kondensators sollte man auch ein Low ausgeben.
jjjjjuuuuuuuuuuuuuuuhuuu =D>
das war mal ein tipp alles geht
vielen dank an alle \:D/ =D> \:D/
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.