Hallo,
Hab ein problem und zwar muss ich ein projekt machen, wo ich auf einem
atmega8 uc analoge signale(dc) 0volt bis 10volt digitalisieren muss und
diese auf einer 8bit led anzeigen stufenweise ausgeben muss, zusätzlich
dazu muss der wert auf einem lcd display angezeigt werden. Wie kann ich
das ganze realisieren da ich unter anderem auf meinem uc nur 5 volt
habe, 3 ports mit jeweils 6 pins ....? Bitte um ausführliche hilfe.
Gruß
Moin 9er,
allzu ausführliche Hilfe kannst du erstmal nicht erwarten. Wir werden
dir das Projekt natürlich nicht vorkauen.
Aber in der Regel wirst du hier wenigsten Links und ein paar
Basis-Ansätze erhaletn, auf denen du selbst aufbauen musst.
10Volt an einem 5V-ADC sampeln ist gar kein Problem. Man teilt die
Spannung über einen Widerstandsteiler herunter. Der Teiler ist bekannt
und mit dem Äquivalent zu den 5V kannst du dann mit dem Teilerfaktor
einfach wieder auf den Wert der Spannugn bis 10V schließen.
Wenn du aber möglichst sauber messen möchtest, solltest du gegen die
interne Referenzsspannung deines Mikrocontrollers messen. Die ist beim
atmega8 z.B. 2,56V. Daher also mindestens die 10V um den Faktor vier
herunterteilen und mit dem ADC gegen die 2,56V sampeln.
Zur Ansteuerung eines LCD findest du hier im Forum auch genug. Such mal
nach HD4470 LCD library für AVR. Wahrscheinlich bist du mit der Lib und
Beschreibung von Peter Fleury am besten dran.
Um LEDs als Leuchtbalken am atmega anzuschließen bist du auch nicht der
erste. Fang erstmal mit der klassischen Beschaltung an und wenn dir die
Pins knapp werden, versuch es mit dem Stichwort LED-Multiplexing.
Alles in allem eine machbare Aufgabe als Schulprojekt oder Laborarbeit
im Rahmen irgendeines E/I-Studiums.
Leider ist der Unterricht viel zu oft ausgefallen deshalb habe ich sehr
wenig Wissen in dem Thema aber trotzdem dank für die Infos, zwar nicht
sehr ausführlich aber hilfreich
René B. schrieb:> Wenn du aber möglichst sauber messen möchtest, solltest du gegen die> interne Referenzsspannung deines Mikrocontrollers messen. Die ist beim> atmega8 z.B. 2,56V.
Da steckt ein kleiner Irrtum drinnen.
Die interne Referenzspannung eines Mega8 ist hauptsächlich eines: sie
ist in der Höhe sehr konstant und von der Versorgungsspannung
unabhängig.
Was sie aber ganz sicher nicht ist: sie ist nicht 2.56V
Henny schrieb:> ...nicht sehr ausführlich, weil du immer noch Arbeit - und keine fertige> Lösung - hast?
Wenn er die Links verfolgen und lesen würde, hätte er für den ADC Teil
sogar das: eine zu 99% fertige Lösung.
Karl Heinz schrieb:> René B. schrieb:>>> Wenn du aber möglichst sauber messen möchtest, solltest du gegen die>> interne Referenzsspannung deines Mikrocontrollers messen. Die ist beim>> atmega8 z.B. 2,56V.>> Da steckt ein kleiner Irrtum drinnen.> Die interne Referenzspannung eines Mega8 ist hauptsächlich eines: sie> ist in der Höhe sehr konstant und von der Versorgungsspannung> unabhängig.> Was sie aber ganz sicher nicht ist: sie ist nicht 2.56V
Datenblatt Seite 198:
"Internal reference voltages of nominally 2.56V or AVCC are provided
On-chip."
Habe gerade vor 3 Wochen damit was gemacht.
Bei den späteren, Atmega328 z.B. ist die Vref 1,1V.
Conny G. schrieb:> Datenblatt Seite 198:>> "Internal reference voltages of nominally 2.56V or AVCC are provided> On-chip.">> Habe gerade vor 3 Wochen damit was gemacht.>> Bei den späteren, Atmega328 z.B. ist die Vref 1,1V.
Ich denke er meint, dass sie nicht genau 2.56V beträgt
Conny G. schrieb:> Karl Heinz schrieb:>> René B. schrieb:>>>>> Wenn du aber möglichst sauber messen möchtest, solltest du gegen die>>> interne Referenzsspannung deines Mikrocontrollers messen. Die ist beim>>> atmega8 z.B. 2,56V.>>>> Da steckt ein kleiner Irrtum drinnen.>> Die interne Referenzspannung eines Mega8 ist hauptsächlich eines: sie>> ist in der Höhe sehr konstant und von der Versorgungsspannung>> unabhängig.>> Was sie aber ganz sicher nicht ist: sie ist nicht 2.56V>> Datenblatt Seite 198:>> "Internal reference voltages of nominally 2.56V or AVCC are provided> On-chip."
Datenblatt, ATMega8, Seite 241 "ADC Characteristics"
1
VRef Reference Voltage Minimum: 2.3V, Typical: 2.56V, Maximum: 2.9V
Alex W. schrieb:> VRef kann über die Register VCC, VRefext, 2,65V oder 1,1V eingestellt> werden
Verwirr bitte den TO nicht noch mehr, als er ohnehin schon ist.
Beim Mega8 gibt es genau diese Möglichkeiten
1
REFS1 REFS0 Voltage Reference Selection
2
0 0 AREF, Internal Vref turned off
3
0 1 AVCC with external capacitor at AREF pin
4
1 0 Reserved
5
1 1 Internal 2.56V Voltage Reference with external capacitor at AREF pin
Wobei die Zahlenangabe 2.56V ein wenig mit Vorsicht zu geniessen ist und
der tatsächliche Wert nachgemessen werden muss.
Hallo Leute,
ich hab mich glaub durch alle Links durchgekämpft aber ich komm einfach
mit dem Projekt nicht klar weil viele Programme in Assembler geschrieben
sind und ich in C programmieren muss :( könntet ihr mir weitere Tipps
geben wie ich das Projekt bis nächste Woche fertig bekommen kann.
Gruß
Hallo Leute,
hab mal versucht ein Programm zu schreiben was leider nicht
funktioniert. Das Programm soll die Spannung AVCC stufenweise (3Bit->8
Zustände) auf den LED's anzeigen. Kann mir bitte jemand ein Tipp geben
warum es nicht funktioniert. Danke für die Infos DomeG.
Gruß
Weil du hier Bit 5 setzt:
> ADCSRA = 0b10100101;
Bit 5 – ADATE: ADC Auto Trigger Enable When this bit is written to on
e, Auto Triggering of the ADC is enabled. The ADC will start a con-
version on a positive edge of the selected trigger signal. The trigger
source is selected by setting the ADC Trigger Select bits, ADTS in SFIOR
und weil du hier die Spannung am Pin ADC0 mißt:
> ADMUX = 0b01000000;
UND weil du hier das Datenblatt lesen solltest (speziell von Seite 204
bis 221 :
http://www.atmel.com/Images/doc2466.pdf
Das Register ADC sollte nur einmal nach der Wandlung gelesen werden?
hmmm.
Verwende doch die Bitbezeichnungen für die Register, außer da wo es
offensichtlich ist. Macht den Coe für alle direkt lesbarer :)
1
// wähle erstmal ADC0 als Eingang
2
uint8_tad_channel=0;
3
4
// puffervariable für ADC-Register
5
uint16_tad_buffer;
6
7
// Kanalwahl
8
ADMUX=(1<<REFS1)|(1<<REFS0)|(ad_channel&0x0f);
9
10
// ADC-Takt einstellen
11
// 3,686400 MHz / 64 = 57,600 kHz
12
// 200 kHz > 57,600 kHz > 50 kHz
13
// das ist also ok
14
ADCSRA=(1<<ADPS1)|(1<<ADPS2);
15
16
// AD einschalten
17
ADCSRA|=(1<<ADEN);
18
19
// erste Wandlung ist eine Dummy Wandlung
20
ADCSRA|=(1<<ADSC);
21
while(ADCSRA&(1<<ADSC)
22
{
23
// wait for end of dummy conversion...
24
}
25
26
ad_buffer=ADC;
27
28
while(1)
29
{
30
// mainloop wie bisher, nur solltest du ad_buffer prüfen...
Uwe an welchem Pin sollte ich denn die Spannung messen, ich habe doch 6
Pins zur Verfügung -> PC0-PC5 und ich habe mir die Dattenblätter sher
oft durchgelesen:)!!! Wieso ich des so umständlich mache mit den
if-Bedingungen ist weil wirs nicht anders gelernt haben:(
Du musst das Datenblatt nicht einfach nur lesen, sondern auch verstehen
;-)
Im Unterricht wurde nie die Switch-Case-Abfrage behandelt?
Sollen die LEDs nacheinander aufleuchten oder immer eine dazukommen?
Hallo,
die Leds sollen stufenweise leuchten, je höher die Spannung desto mehr
Bits Christian und Switch-Case-Abfragen haben wir nur kurz angesprochen.
Wie würdet ihr die Widerstände für den Spannungsteiler wählen?
Hochohmig?
Gruß
9er schrieb:> Hallo,> die Leds sollen stufenweise leuchten, je höher die Spannung desto mehr> Bits Christian und Switch-Case-Abfragen haben wir nur kurz angesprochen.>> Wie würdet ihr die Widerstände für den Spannungsteiler wählen?> Hochohmig?>
So dass beide Widerstände zusammen in der Gegend von 10k haben.
Wenn du von 0 bis 10V messen sollst, als Referenzspannung die Versorgung
mit 5V wählst, brauchst du also einen Spannungsteiler 2:1. Zwei 10k
Widerstände in Serie. Oder 2 Stück 4k7 Widerstände
Viele Dank erstmal.
Bei 2,56 V Referenzspannung mache ich dann R1 = 10K und R2 = 2,5K, passt
des weil ich ja dann 0,6 V abweiche von Vref. Und muss ich einen
Kondensator ranhängen, hab nämlich oft was mit Kondensator gelesen.
9er schrieb:> Viele Dank erstmal.> Bei 2,56 V Referenzspannung mache ich dann R1 = 10K und R2 = 2,5K, passt> des weil ich ja dann 0,6 V abweiche von Vref. Und muss ich einen> Kondensator ranhängen, hab nämlich oft was mit Kondensator gelesen.
Ein Kondesantor, 100nF, vom ARef-Pin nach Masse.
So wie das in gefühlten 10 Millionen anderen Beiträgen hier im Forum,
inklusive aller Tutorien und Datenblätter steht.
Karl Heinz schrieb:> 9er schrieb:>> Viele Dank erstmal.>> Bei 2,56 V Referenzspannung mache ich dann R1 = 10K und R2 = 2,5K, passt>> des weil ich ja dann 0,6 V abweiche von Vref.
Nein das passt nicht.
Denn wenn ich deine Daten hernehme und da mal mit 10V durchrechne, dann
komme ich drauf, dass aus dem Spannungsteiler dann 3.125V rauskommen.
Du bist also zu hoch. Und zwar prozentual schon ganz ordentlich zu hoch.
Nimm doch die 5V, die du am Mega8 sowieso zur Verfügung hast.
Kein Mensch erwartet von dir, dass du ein hochpräzises Messinstrument
bauen kannst. Du hast ja ausserdem sowieso sicherlich nicht die
hochpräzisen Widerstände im Einsatz. Dein 10k Widerstand hat keine 10k.
9er schrieb:> Wie kommst du auf die 3.125V?
Hmm.
Gute Frage. Da muss ich mich wohl am Taschenrechner wo vertippt haben.
Nochmal gerechnet und siehe da. Da bist im zulässigen Bereich.
Da ich die analoge Spannung stufenweise auf 8 leds ausgeben will
benötige ich ja beim atmega8 zusätzlich noch 5 leds. Ich würde diese
leds jeweils mit 350ohm vorwiderstände beschalten, passt des??? Und
schalte ich diese dann gegen masse bzw gnd oder +5V bzw Vcc???
Gruß
9er schrieb:> Ich würde diese leds jeweils mit 350ohm vorwiderstände beschalten,> passt des???
Wenn die LEDs nicht ganz funzelig sind, darf der Widerstand gerne 1kΩ
haben. Probiers aus mit der Helligkeit.
> Und schalte ich diese dann gegen masse bzw gnd oder +5V bzw Vcc?
Das kannst du machen wie du möchtest. Du kannst auch die eine Hälfte
gegen Gnd und die andere gegen VCC schalten, mußt sie nur passend
ansteuern.
> ??
?