Narbend alle zusammen,
für meinen ersten Test mit einem A/D Wandler hab ich mir das Beispiel
aus dem GCC Tut vorgenommen und laut Compiler auch alles richtig gemacht
nur wandelt er anscheint nicht richtig oder ich hab es falsch
verstanden.
Zum Aufbau ich verwende die Ext Ref Spannung und hab am ADC0 des m16 ein
Poti angeschlossen.
Poti Kontakte (Links Plus) (Mitte ADC0) (Rechts Plus)
Am PORTD 6 Hängt eine LED dran
WERT <= 512 LED AUS
WERT >= 512 LED AN
Ich kann am Poti drehen wie ich will da passiert nix könnte sich einer
von euch mal Bitte den Code anschauen.
Mfg Bqube
1
/* ADC initialisieren */
2
voidADC_Init(void){
3
4
uint16_tresult;
5
ADMUX&=~((1<<REFS0)|(1<<REFS1));
6
ADCSRA=(1<<ADPS1)|(1<<ADPS2);// Frequenzvorteiler
7
ADCSRA|=(1<<ADEN);// ADC aktivieren
8
ADCSRA|=(1<<ADSC);// eine ADC-Wandlung
9
while(ADCSRA&(1<<ADSC)){// auf Abschluss der Konvertierung warten
10
}
11
result=ADCW;
12
}
13
14
15
uint16_tADC_Read(uint8_tchannel)
16
{
17
18
ADMUX=(ADMUX&~(0x00))|(channel&0x00);
19
ADCSRA|=(1<<ADSC);// eine Wandlung "single conversion"
20
while(ADCSRA&(1<<ADSC)){// auf Abschluss der Konvertierung warten
Was soll das?
ADMUX = (ADMUX & ~(0x00)) | (channel & 0x00);
irgendwas UND 0x00 ist immer 0x00
~0x00 = 0xFF
irgendwas & 0xFF ist immer irgendwas
irgendwas | 0x00 ist immer irgendwas
ADMUX wird hier also nicht verändert.
Irgendwer schrieb:>> Poti Kontakte (Links Plus) (Mitte ADC0) (Rechts Plus)>> In diesem Fall ist der ADC0 immer "Plus".
Ha, das hab ich ja glatt überlesen :)
Der Pegel an ADC0 ändert sich nie!
Weil, mit dem ADMUX würde auf alle Fälle ADC0 gewandelt werden.
Textaufgaben find ich doof. ;)
Ich meinte eigentlich das fertige Binär- oder Hex-File.
Vielleicht macht ja der Compiler was merkwürdiges, zB. dass PORTA
irgendwie vorconfiguriert wird. Du initalisierst ja selbst PortA nicht.
Aber das könnte ich erst morgen Abend anschauen. Das Bett ruft.
Hab's mir doch noch schnell angesehen.
Im Simulator läuft es.
Da bleiben noch folgende Fragen:
Leuchte die LED?
wie hoch ist die Spannung am ADC0 und ändert sie sich tatsächlich?
Was für einen Widerstand hat das Poti?
[edit]
Ich hab mal noch das disassemblierte(Q&D für AVRStudio) Programm
angehängt.
So nun bin ich auch wieder da,
mir hatte das keine Ruhe gelassen und so hab ich noch ein wenig probiert
siehe da es passiert was, auch wenn es mich Zwei Atmega16 gekostet hat.
Die Wandelung hab ich auch nur auf den Atmega644 testen können da mein
Vorrat an M16 aufgebraucht war.
Ich kann mir nicht erklären warum die Dinger durchgebrannt sind denn ich
hab beim 644 genau das gleiche Programm verwendet.
Zum testen hatte ich einen 1k Poti .... wie gesagt es war ja nur der
Test nun kommt das eigentliche Projekt :) was die Woche fertig werden
muss.
Mfg Bqube
SO nun mal eine Frage zum Messen....
Wenn ich mit meinem Uc einen Widerstandswert in einem festen Bereich
messen möchte könnte ich wie folgt vorgehen...
9V Batterie --> LM317 Strombegrenzung 5mA --> LM317 Spannungsbegrenzung
5V
So könnt ich doch Maximal ~1KOhm Rechnerrisch erfassen oder nicht ?
R=U/I
5V / 0.005A = 1000Ohm
Mfg Bqube
Naja, ein kleiner Fehler wird durch den Spannungsteiler der
Spannungsbegrenzung entsehen. Der liegt praktisch paralell zu deinem zu
messenden Widerstand.
Hi
>Mhhh Konstantstrom Plus 7805 oder wirkt da dann der Selbe Effekt wie>beim LM317 mit seiner externen Zusatzschaltung '?
Erkläre mal ,was eine 'Kombination' aus Stromregler und Spannungsregler
machrn soll.
MfG Spess
Pierre Gnauck schrieb:> Wieso ? was ist an der Kombination denn falsch?!
Na vielleicht dass Spannung, Strom und Widerstand voneinander abhängen.
Son Typ names "Ohm" hat das rausgefunden. Und wenn du nun den Strom UND
die Spannung vorgeben willst, dann MUSST du auch den Widerstand
vorgeben. Sprich, deine gewünschte Spannung beim gewünschten Strom
stellt sich NUR ein wenn du den exakt richtigen Lastwiderstand hast.
Lange Rede kurzer Sinn: Beides kannst du nicht haben, entweder konstante
Spannung oder konstanter Strom.
gruß cyblord
Dann versteht ihr mich falsch die 5v sind dafür da damit ich den Eingang
vom Uc nicht grille ich leite die 5V dann mit einem festen Strom durch
einen variablen Widerstand.
Lass dich nicht beirren, Du bist auf dem richtigen Weg.
Ist nicht optimal, aber das Prinzip ist richtig.
Und wenn es nicht jeder versteht, hast Du einen klaren Vorteil. :)
Man muss sich für seine Ideen nicht rechtvertigen. Besonders nicht, wenn
sie funktionieren. ;)
Pierre Gnauck schrieb:> Dann versteht ihr mich falsch die 5v sind dafür da damit ich den Eingang> vom Uc nicht grille ich leite die 5V dann mit einem festen Strom durch> einen variablen Widerstand.
Entweder Du schreibst arg mißverständlich oder Du bist noch immer auf
dem Holzweg. Du kannst nicht beides gleichzeitig fest vorgeben und
erwarten, daß das mit verschiedenen Widerständen klappt. Das wurde schon
erklärt (siehe oben). Es gilt noch immer U=R*I.
Was möglich ist:
a) Man gibt die Spannung vor und begrenzt den Strom, was bedeutet das
die Spannung ab Erreichen des Strommaximums heruntergeregelt wird.
oder
b) Man gibt den Strom vor und begrenzt die Spannung, was bedeutet das
der Strom ab Erreichen des Spannungsmaximums heruntergeregelt wird.
Dies bedeutet, daß in beiden Fällen nicht beides gleichzeitig der
Vorgabe entspricht. Einer der beiden Werte ist niedriger als die
Vorgabe, bis auf die ganz spezielle Ausnahme, in der der Widerstand mit
R=U/I passend zu den Vorgaben zu U und I gewählt ist
adenin schrieb:> Lass dich nicht beirren, Du bist auf dem richtigen Weg.
Du hast ja recht aber es kann ja wirklich sein das ich mich
unverständlich ausdrücke was ich eigentlich nicht glaube.... aber es
kann ja so sein...
mhhh oder die User lesen sich nicht alles durch...
Da mich ja hier einige an das Ohmsche Gesetzt erinnern wollen, wenden
wir es doch einfach mal an :)
Sogar mit Bild !!!
R = U/I
R = 0.5 V / 0.005 A
R = 100 Ohm
Wie ich auf die 0.5 V komme ganz einfach..... Die würde ich am M16 Pin
ADC 7 messen wenn der zu erfassende Widerstand einen Wert von 100 Ohm
hätte.
Weil wie wir ja alle wissen, (ich mein gerade die User die mir mit dem
Ohmschen Gesetz angekommen sind) dass wenn ein Strom durch einen
Widerstand fließt, an diesem Widerstand auch eine Spannung abfällt.
Soooo
Pierre Gnauck schrieb:> Dann versteht ihr mich falsch die 5v sind dafür da damit ich den Eingang> vom Uc nicht grille ich leite die 5V dann mit einem festen Strom durch> einen variablen Widerstand.
In diesen drei Zeilen steht doch genau das gleiche in Grün drin
Zusammengefasst:
-Feste Spannung von 5V zum Schutz des Atmega16
-Eine Konstantstromquelle
-Einen Variablen Widerstand
Ich hoffe mal jetzt haben es alle verstanden wenn nicht selbst schuld.
Mfg Bqube
Pierre Gnauck schrieb:> Sogar mit Bild !!!
Ich sehe schon mal 2 Fehler:
1. der AD-Eingang ist hochohmig, da fließt dort (fast) kein Strom. Also
ist die Spannung an ADC7 immer +5V
2. AVCC ist ein Versorgungspin und braucht eine feste Spannung. Falls
tatsächlich die 5V durch den Strom des Potis runtergehen sollte (was er
wegen 1. z.Zt. nicht tut), arbeitet der µC nicht mehr richtig.
Gruß Dietrich
spess53 schrieb:> Hi>> Stromquelle schon mal falsch.>> MfG Spess
Wenn du es schaffen würdest ... nur falls..... könntest du ja auch einen
längeren Satz mit mehr Information bilden z.b das warum ?
Dietrich L. schrieb:> 2. AVCC ist ein Versorgungspin und braucht eine feste Spannung. Falls> tatsächlich die 5V durch den Strom des Potis runtergehen sollte (was er> wegen 1. z.Zt. nicht tut), arbeitet der µC nicht mehr richtig.
Ja aber wieso das denn ? Die AVCC-Leitung geht doch vor den Widerstand
an den Ausgang vom LM317 ?
Mfg Bqube
Pierre Gnauck schrieb:> Ja aber wieso das denn ? Die AVCC-Leitung geht doch vor den Widerstand> an den Ausgang vom LM317 ?
Und welche SPannung liegt an diesem Pin an?
Heinweis: Nein, es sind nicht 5V. Noch nicht mal dann, wenn es im
Schaltplan dort dabei steht.
vielleicht solltest du dir mal darüber im klaren sein, wie eine
Konstantstromquelle arbeitet.
Man hat da einen Widerstand, der an dem einen Ende an Masse hängt
1
|
2
+-+
3
| |
4
+-+
5
|
6
---+---
Und der muss da auch an Masse hängen, damit überhaupt irgendwann da mal
ein Strom fliessen kann.
Weiters gibt es eine Konstantstromquelle, die am anderen Ende des
Widerstandes angeschlossen wird
1
KSQ
2
|
3
|
4
+-+
5
| |
6
+-+
7
|
8
---+---
diese Konstantstromquelle hat die Aufgabe, durch den Widerstand eine
bestimmte Menge an Strom zu jagen.
Nur das ist leichter gesagt als getan. Denn die KSQ kann nicht einen
Strom durch den Widerstand durchdrücken. Strom wird gezogen und nicht
gepresst. D.h. der Widerstand bestimmt, wieviel Strom durch ihn
durchfliesst. Die dazu benötigte Kenngröße ist eben das R. Der
Konstantstromquelle bleibt nichts anderes übrig, als die am Widerstand
anliegende Spannung so lange zu verändern, bis dann eben die gewünschte
Strommenge durchrinnt.
Um das festszustellen, und damit (und mit der Kenntnis der Strommenge,
die die KSQ einstellt) misst du also HIER
1
KSQ
2
|
3
+--------> zum ADC
4
|
5
+-+
6
| |
7
+-+
8
|
9
---+---
die Spannung, die die KSQ einstellt! Und mit der Spannung und dem
bekannten Stom kann man dann auch den Wert des Widerstandes bestimmen.
Hier
1
+-----+
2
KSQ ------| |--------
3
+-----+
rinnt überhaupt kein Strom. Das ist kein geschlossener Stromkreis! WIe
soll da denn Strom fliessen?
Hi
>Wenn du es schaffen würdest ... nur falls..... könntest du ja auch einen>längeren Satz mit mehr Information bilden z.b das warum ?
Ich dachte du kennst das Datenblatt? Wenn nicht, sollest du es dringend
intensiv lesen und verstehen.
MfG Spess
Danke Karl Heinz Buchegger :)
Ich hatte dabei einfach ein wenig zu Simple gedacht und es würde auch so
klappen aber das ist ja genau wie beim Spannungsteiler ich kann nichts
messen wenn der gegen Masse liegende Widerstand nicht mit der Masse
verbunden ist und so auch kein Strom fließt.
Mfg Bqube
Naja, dein Ansatz ist fast richtig.
Benutz aber Anstatt eines zweiten LM317 zur Spannungsbegrenzung lieber
eine 5.1V Z-Diode.
siehe erstes Bild
Da ist die Spannung über einen Bereich von 0 - 1500 Ohm aufgezeichnet.
Für erste Versuche sollte das ausreichend sein.
Und als lowcost Variante noch Bild 2.
Hi
>Benutz aber Anstatt eines zweiten LM317 zur Spannungsbegrenzung lieber>eine 5.1V Z-Diode.
Warum keine einfache Diode nach VCC? Ist doch eh nur ein geringer
Konstantstrom. Aber lass Pierre erst mal sein zusammengefallendes
Kartenhaus sortieren. Dann kann man weitersehen.
MfG Spess
spess53 schrieb:> Hi>>>Benutz aber Anstatt eines zweiten LM317 zur Spannungsbegrenzung lieber>>eine 5.1V Z-Diode.>> Warum keine einfache Diode nach VCC? Ist doch eh nur ein geringer> Konstantstrom. Aber lass Pierre erst mal sein zusammengefallendes> Kartenhaus sortieren. Dann kann man weitersehen.>> MfG Spess
Ja, der zusätzliche 1k Vorwiderstand hält alles Böse vom IO ab.
Eigentlich brauch man so keine Schutzdiode, weil der ATMega ja jeweils
eine nach GND und nach VCC für jedes IO-Pin hat, Man will ja auch nicht
zu viel auf einmal tricksen. Dabei man muss aber aufpassen. Es gibt
CPU's, da werden die Schutzdioden weggeschalte, wenn man bestimmte Pins
mit einer alternativen Funktion (also nicht Digital-IO) verwendet.
Und so sehr zusammen gefallen ist es ja nicht. In meiner Schaltung hab
ich nur ein paar Sachen korrigiert. Das Prinzip ist aber so, wie er es
ursprünglich machen wollte: mit Konstantstrom die Spannung über den
Widerstand messen.
Pierre Gnauck schrieb:> In diesen drei Zeilen steht doch genau das gleiche in Grün drin>> Zusammengefasst:>> -Feste Spannung von 5V zum Schutz des Atmega16> -Eine Konstantstromquelle> -Einen Variablen Widerstand
Das geht nicht. Nochmal U=R*I. Das sind 3 Größen. Setzt Du zwei davon
fest, so ist die dritte dadurch auch schon definiert und somit kann
folglich nichts variabel sein. Man legt eine Größe fest um die Andere
zu messen um dann aus den beiden die dritte zu berechnen.
Ach ja, die ganze Schaltung kann so nicht funkzionieren. Ein Teil wurde
schon beschrieben.
Der erste Regler ist nur im bei niederohmiger Last eine
Konstantstromquelle, wird aber durch den nachfolgenden Spannungsregler,
der ja "dicht" macht wenn die Spannung hochläuft, zur Strombegrenzung.
LM3 kann keinen Stromfluß erzwingen wenn der Strom nicht angenommen
wird. Er kann nur "zu" machen wenn zuviel fließt. Dann bricht aber die
Spannung am LM4 ein, da ihm der Saft ausgeht um die Spannung zu halten.
Weiter hängt die Versorgung des Atmels, oder zumindest ein Teil davon
(AVcc) hinter dem Spannungsregler. Daß heißt er wird über den
strombegrenzten Pfad versorgt.
Jetzt stelle ich mal ganz unschuldig die Frage was dort mit der Spannung
passiert wenn über AVcc viel Strom "verbraucht" wird und was passiert
wenn der Atmel über AVcc mehr als die 5 mA benötigen sollte für seine
Aufgaben?
U=R*I verwende ich um klar zu machen, daß sich die Größen gegenseitig
beeinflussen. Ich kann nicht U UND I festlegen und R variabel lassen.
Und ich kann dann schonmal gar nichts sinnvoll messen, da der
A/D-Wandler Spannungen digitalisiert um dann daraus den Rest zu
errechnen. Da gibt es nicht viel zu berechnen wenn alle Größen Fix uns
unveränderlich sind.
Zwischen AVcc und AGND gehört eine 100nF Kondensator (Kerko).
Zwischen Vcc und GND gehört ein 100nF Kondensator (Kerko).
Beide jeweils so dicht an die Pins ran, wie es geht.
Der Hersteller des LM317 sieht einen Ausgangskondensator von 1µF vor. Du
solltest den nicht eigenmächtig ändern! Das schlägt sich sonst in den
Regeleigenschaften des Spannungsreglers nieder! Der Hersteller weiß
schon, welche Werte gut sind und empfiehlt die auch in den
Datenblättern.
So weit war ich mit dem Zeichnen noch nicht denn ich hab noch ein
kleines Problem mit der Aufteilung und Umsetzung meiner Idee.
Ich möchte vom PORTA alle 8Bit für die Datenübertragung nutzen und wenn
dies abgeschlossen ist über jeden Zweiten PORT sprich PORTA 1,3,5,7 eine
Spannungsmessung vornehmen.
Es wird zuerst geprüft ob alle 8 Ethernet Leitungen richtig verklemmt
wurden, ist dies passiert schließt der Sender jeweils ein Adern paar
kurz und der Empfänger kann dann den Leitungswiderstand der Schleife
messen.
Mfg Bqube
Äh..Hmmm...*grübel*
Wer misst, misst Misst.
Also den Schleifenwiderstand misst Du so nicht.
Aber R4 kannst Du schön vermessen. ;)
Das ist der Prüfling. Anstelle von R4 muss Deine zu prüfende Leitung
dort gegen Masse eingefügt werden.
Pierre Gnauck schrieb:> So nen misst stmmt ... immer diese kleinen Fehler mit der großen wirkung> .)
Ich habe zwar noch nicht kapiert bzw. mir die Mühe gemacht, zu kapieren
wie der Messablauf für die Schleifenmessung funktioniert (*), aber die
Relais brauchen in jedem Fall Freilaufdioden. Ob die Relais direkt von
den Ports betrieben werden können oder einen Treiber brauchen, hängt von
ihren Daten ab.
(*) Vielleicht kannst Du ja mal den Messablauf beschreiben, was so
nacheinander passiert (Signale an den Port-Pins, Relaiseinstellung,
Aktionen im Programm).
Gruß Dietrich
Dietrich L. schrieb:> (*) Vielleicht kannst Du ja mal den Messablauf beschreiben, was so> nacheinander passiert (Signale an den Port-Pins, Relaiseinstellung,> Aktionen im Programm).
Klar das mach ich aber wird erst morgen abend was, Samstag früh ist
Sonderschicht.
Mfg Bqube
Moin moin,
Der Ablauf ist wie folgt:
Der Sender schickt über jede der 8 Datenleitungen einen anderen
Datensatz, so das der Empfänger weiß wo sich welche Leitung befindet.
Mit dieser Information kann dann der Techniker die Leitungen so Umpolen
das sie 1-1 verdrahtet sind.
Sind alle Datenleitungen 1-1 gepolt so kann die Widerstand Messung
beginnen, der Sender Brückt intern die Adern 1-2 , 3-4 , 5-6 , 7-8 und
im Empfänger werden die Wechselkontakte vom Relai K10 Betätigt.
Die Port's PC1, PC3, PC5, PC7 werden auf Masse geschaltet und mit Hilfe
von K1 , K2 , K3 , K4 kann der Empfänger jedes Leitungspaar durchmessen.
Hoffentlich konnte ich es verständlich genug rüber bringen :)
Mfg Bqube
Narbend,
beim Testen ist mir einer meiner 2313 kaputtgegangen was ich mir aber
nicht erklären kann ?
//Sender//
Testprogramm 1:
Schaltet die Relais einzeln durch alle 100ms (ohne Probleme)
Testprogramm 2:
Schaltet alle Relais gleichzeit (ohne Probleme)
Testprogramm 3:
Setz alle pins vom PORTB auf 0V (ohne Probleme)
Testprogramm 4:
Setz alle pins vom PORTB auf 5V (ohne Probleme) aber danach ist der 2313
nicht mehr Programmierbar
Hab das Testprogramm 4 ein weiteres mal auf einen anderen (neuen) 2313
geschrieben ... getestet und kann ihn auch weiter beschreiben ohne
Probleme ....
Woher kommt es das sich ein Uc nicht mehr beschreiben lässt ?
Fehler im Programmer denn die Sendeplatine mit der ich die Test's
durchführe ist immer die Selbe?
Mfg Bqube
So hier ist die fertige Sendeeinheit im Gehäuse :) (Ein wenig stolz)
Warum der erste 2313 kaputt gegangen ist da hab ich eine kleine
Vermutung,
was passiert wenn man die Ausgänge auf 5V schaltet aber vorher die PORTS
nicht als Ausgänge definiert?
Ist der Uc deswegen kaputt gegangen?
Mfg Bqube
Pierre Gnauck schrieb:> was passiert wenn man die Ausgänge auf 5V schaltet aber vorher die PORTS> nicht als Ausgänge definiert?>> Ist der Uc deswegen kaputt gegangen?
Das ist völlig ok und steht auch so im Datenblatt. Damit aktivierst du
nur die Pull-Ups solange es Eingänge sind.
Es gibt 4 Zustände.
1. High-Z Eingang (high impedance)
2. Eingang mit Pull-Up aktiviert
3. Ausgang low
4. Ausgang high
Von 1 kommt man nach 4 nur über den Zwischenschritt 2 oder 3, da man nur
von Eingang zu Ausgang umschalten kann und danach PORTxn ändern kann
oder umgekehrt. Beides gleichzeitig geht nicht, da es unterschiedliche
Register sind und daher 2 Befehlre erforderlich sind. Das ändern von
PORTxn (de)aktiviert die Pull-Ups wenn der Port auf Eingang steht oder
setzt den Ausgang, wenn der Port auf Ausgang steht. Es gibt nur diese
beiden Wege und beide sind zulässig.
Pierre Gnauck schrieb:> 100_1955.png> 100_1954.png
Was meinst du, welche Bedeutung der Hinweis auf die Bildformate hat,
der hier im Forum direkt vor einem Upload angezeigt wird.
Was ist an "JPG-Dateien NUR für Fotos und Scans verwenden, Schaltpläne
und Zeichnungen nur als PNG oder GIF" so schwer zu verstehen?
Meine Kamera Spuckt nur PNG aus ... hatte versucht die Bilder dann mit
Hilfe von Software in JPG zu wandeln was komischer weise die Größe um
ein vielfaches vergrößert hatte.
Noch eine kleine Frage nebenbei..... gibt es große Unterschiede bei den
Toleranzen von Zehner Dioden ?
Denn bei meinen die ich von Pollin hab (5V1) kann ich nur 4.3V bei 9V
Eigenspannung messen.?
Mfg Bqube