Hallo, bin neu dabei und fange gerade mit diesem Thema an, microControler, Assembler.... Meine Frage: Ich möchte/muss an einem mega8(16,32) an 8 Eingänge jeweils 8 analoge Werte einlesen, also 64 analoge Werte!. Es sollen alle (64) Thermofühler (PT1000) hintereinander abgelesen und per ser. Schnittstelle ausgegeben werden. Also mega8-Eingang 1, dort sollen alle MUX-Kanäle geschaltet und ausgegeben werden werden, dann der nächste mega8-Kanal geschaltet und dort den jeweiligen MUX auslesen..usw. und alles so lange bis gestoppt wird. Meine Schaltung: 8x(8x ADC(TLC549)-> 1x MUX(74LS251))->mega8 ->MAX232 ->SubD9 Meine Frage/n: 1. Hat jemand schon sowas gemacht und kann mir da hilfreiche Hinweise geben ? 2. Habe den assembler-Code (AVR-Tutorial)aus dem Forum getestet (für interne ADCs), wie aber muss der Code umgestrickt werden um externe ADCs zu verwenden? Vielen Dank. PS: Also nach meinem Verständniss müsste der mega8 an 3 Aussgänge die 3bit für die Umschaltung des MUX ausgeben, dann werden alle 8 Eingänge des MUX eingeschaltet und die Werte der jeweiligen ADCs eingelesen. Wenn alle 8 Eingänge des MUX geschaltet worden sind springt der mega8 und der nächste Eingang wird verarbeitet.... Ich benutze das Board von Pollin mit mega8 (Atmel Evaluationboard Ver. 2.0) und habe daran eine Europlatine mit den 8xADCs,1xMUX per Flachbandkabel angeschlossen. Diese Extraplatine wird 8x gebaut, also jeweils 8 Eingänge auf einer Platine die jeweils an einem mega8-Eingang angeschlossen wird. Als Software benutze ich das Atmel AVR-Studio in Simulationsmodus, für die Übertragung auf den mega8 verwende ich PonyProg2000.
>Meine Schaltung: 8x(8x ADC(TLC549)-> 1x MUX(74LS251))->mega8 Versteh ich nicht. Wieso nimmst Du nicht den internen AD-Wandler plus 8 mal 8 in 1 Multiplexer? Wieso 64 TLC549??
Danke für die schnelle Antwort. Es war mir nicht klar dass ich die ADCs nach einem MUX schalten kann. So wird auch der Aufwand geringer! Hast Du auch zu meinem Hauptproblem eine Idee? Vielen Dank PS: Wenn dass so geht dann kann ich den Code aus dem AVR-Tutorial nehmen und nur zusätzlich den 3bit-Umschakter für die MUX "anbauen"...
PT1000 mit 8bit AD-Wandlung? Der Schaltungsaufwand für die Widerstandsmessung steht dann doch in keinem Verhältnis zum Ergebnis!?
Danke für die schnelle Antwort... Also ich habe halt diese Teile hier, wollte keine neuen Thermofühler besorgen. Gibt es eine Berechnung welcher Wert für welche bit-Auflösung sinnvoll ist ? Vielen Dank
Ist Dir überhaupt klar wie Du Widerstandsthermometer oder alternativ Thermoelemente beschalten musst? Die kannst Du nicht an den ADC klemmen und gut ist.
Danke für die schnelle Antwort. Also ich weiß dass ich einen Spannungsteiler für jeden Fühler bauen muss. Ich verwende eine Ref.spannung, diese muss per Spannungsteiler (R1 + Rth) so bemessen sein das der Eingang des mega8 nicht übersteuert wird. Gibt es noch was zu bedenken was ich übersehen habe ? Vielen Dank PS: Noch was fällt mir auf: mein mega8 in PDIP-Gehäuse hat nur 6x interne ADCs! Muss ich einen anderen "mega" benutzen oder gibt es da ein Trick? Danke
Ich denke Du weißt so gut wie nichts. Das ist nicht böse gemeint, aber Deine Reaktionen zeigen, dass Du die Verwendung von Pt1000-Fühler überhaupt nicht verstanden hast. Du benötigst eine KonstantSTROMquelle um den sich ändernen Widerstandswert des Fühlers messen zu können. Obendrein macht sich ein kleiner Operationsverstärker zwecks Signalverstärkung noch ganz gut... Ich habe Dir mal ein pdf angehangen, welches ich irgendwann mal, irgendwo im Netz gefunden habe.
Vieln Dank, das wusste ich wirklich nicht. Also muss ich für jeden Fühler so eine Schhaltung benutzen.... Soweit klar! Danke PS: Gilt diese Schaltung für alle Thermoelemente ? In meiner Teilekiste habe ich auch einige NTCs und PTCs gefunden... Habe auch einen LM34 hier, der gibt 10mV/°F aus.... Danke
Ein PT100 ist KEIN Thermoelement! NTC und PTC sind auch keine Thermoelemente, genauso wenig wie ein LM34... Ich würde sagen Du solltest Dich wirklich erstmal mit den Grundlagen der Elektronik auseinandersetzen, bevor Du ein 64 Kanal Thermometer baust.
Hallo Robert! Ich verstehe nicht ganz, warum du soviele AD-Wandler benötigst. Mein Ansatz wäre folgender: Internen AD-Wandler verwenden oder falls der nicht genau genug ist einen genaueren Externen. Auf diesen würde ich dann mit einem 64 -> 1 DEMUX (Demultiplexer) meine 64 Analog-Signale nacheinander aufschalten und wandeln. Falls du sowieso immer ALLE Werte benötigst und nicht spezielle selektieren willst, kannst du noch einen Zähler spendieren, der dir die DEMUX-Adressen bildet. So brauchst du nur noch eine Taktleitung für den Zähler und eine Resetleitung (für einen definierten Anfangszustand) und natürlich die Leitung zu deinem AD-Wandler-Eingang. Der Algorithmus sieht dann prinzipiell so aus: Beim ersten Start: Reset einmal toggeln Im Betrieb dann: ->AD-Wandeln ->Verarbeiten ->auf Schnittstelle senden ->Takt per IO-Port an Zähler senden für nächsten Wert ->AD-Wandeln ->Verarbeiten . . . Ich hoffe, dass ich dir noch ein paar wertvolle Tipps gegeben habe. Viel Erfolg bei deiner Lösung! Mandrake
Erstmal vielen Dank Es ist mir klar das ich Wissenslücken habe, deswegen bin ich hier und ich bedanke mich für jede Hilfe. Habe hier im AVR-Tutorial das Thema ADC und Themperaturmessung durchgelesen und mir war soweit alles klar.... Gut, ich werde mein Wissen sicherlich vertiefen müssen, was aber auch nur durch lernen und versuchen am besten funktioniert! Zurück zu meiner Frage: Wenn ich alles soweit richtig gemacht habe, komme ich wieder zurück zum mega8 im PDIP-Gehäuse. Der hat nur 6x ADCs, was bedeutet dass ich entweder nur 6 Kanäle habe oder ich verwende 9x MUX, also 8x MUX für die Thermoeingänge und das 9´te MUX um alle anderen MUX an einem ADC-Eingang zu verschalten! Eine andere Möglichkeit ist einen anderen "mega" zu verwenden der schon 8xADC an Board hat. Ist das soweit OK? Vielen Dank
Hallo Mandrake und vielen Dank für die schnelle und einfache Antwort. Wie gesagt war es mir nicht klar dass ich einen analogen Wert durch einen MUX jagen und erst danach einen ADC einsetzen kann. Habe hier einige 74LS251 (8->1) und würde sie gerne verwenden... Hast Du zufällig einen Tip für einen 64->1 MUX oder soll/kann ich es mit 9xMUX, wie beschrieben machen ? Vielen Dank
>Wenn ich alles soweit richtig gemacht habe, komme ich wieder zurück zum >mega8 im PDIP-Gehäuse. >Der hat nur 6x ADCs Entweder TQFP... >Eine andere Möglichkeit ist einen anderen "mega" zu verwenden der schon >8xADC an Board hat. ...oder gleich ATMega16/32.
Hallo Michael, vielen Dank für die schnelle Antwort. Habe mir das Datenblatt soeben geholt.... Bedeutet dass das ich meine 74LS251 nicht verwenden kann ? Währe sehr schade! Auch mit diesem Modell müsste ich aber mit einem mega8 eine 2-Ebenen Matrix aufbauen, 8x MUX für die 64 eingänge und 1x Mux für die 8 Ausgänge an den ADC. Vielen Dank
Hallo Jack, vielen Dank für die schnelle Antwort. OK, werde mir dann den mega16 einbauen. Der Code bleibt aber der selbe wie im AVR-Tutorial für den mega8 beschrieben, oder? Danke PS: Klar dass da einige Anpassungen bezüglich des Contr. gemacht werden müssen..
>Bedeutet dass das ich meine 74LS251 nicht verwenden kann ?
Der 74LS251 ist KEIN Analogmultiplexer, der 4051 schon.
OK, also MUSS ich den 4051 nehmen.... Gucke gerade wo ich den günstig finden kann... Vielen Dank
Hallo Jack, habe in meiner Kiste einen mega8535 gefunden...der müsste es auch tun! Also dann: 8x 74HC4051 -> mega8535 -> MAX232 ->SubD9 Die Software aus dem AVR-Tutorial (ADC) anpassen, 3 Ausgänge als Schalter für die MUX.... Hast Du einen hilfreichen Tip wie man das am besten macht ? Ich bin neu im Assembler-Geschäft....aber lernfähig :-) Vielen Dank
Wieso machst du das ganze nicht einfach in C? Ich denke ist ein bisschen eifacher zu programmieren. Gruss Olli
Hallo Olli, danke für die schnelle Antwort. Also ich bin in keiner der beiden Programmiersprachen ein Ass. Hier habe ich den Assembler-Code gefunden den ich mit AVR-Studio testen konnte um erste Erfahrungen zu sammeln. Wenn Du Code in C haben solltest dann würde ich mir das Ganze auch in C angucken und einarbeiten. Mit der Software AVR-Studio ist auch WinAVR installiert worden, so kann ich auch in C schreiben und testen. Würde mich sehr darüber freuen. Vielen Dank
>Ich bin neu im Assembler-Geschäft....aber lernfähig :-)
Mit Assembler sollte das nicht allzu schwierig sein, den Ablauf hat ja
"mandrake" weiter oben schon beschrieben.
Falls Du noch nicht viel Erfahrung im Umgang mit µC-Programmierung hast,
würde ich zuerst versuchen, nur einen einzigen Analogwert einzulesen
und den über den UART zu senden.
auch ein guter Analogmux ist der 4067 (1:16) oder zweikanalig der 4097 (2x 1:8).
aber bevor Du n Bausteingrab zusammentüftelst solltest Du Dir evtl. die Frage stellen ob es nicht sinnvoller währe einfach 8-mal nen Mega16 zu nehmen, diese mit jeweils 8 Temperaturfühlern auszustatten und die ganze Geschichte über z.B. UART miteinander kommunizieren zu lassen. Hätte bei der Verwendung von z.B. RS485 den Vorteil, dass Du die Sensorinseln räumlich weit auseinander platzieren kannst.
jack wrote: > Falls Du noch nicht viel Erfahrung im Umgang mit µC-Programmierung hast, > würde ich zuerst versuchen, nur einen einzigen Analogwert einzulesen > und den über den UART zu senden. Hallo Jack und danke für die schnelle Antwort. Habe auch diesen Weg genommen und den Code aus dem Tutorial (AVR-Tutorial - ADC) getestet. Ich bin gerade dabei die Ausgabe zu formatieren und beisse mir noch die Zähne aus wie ich alle 6 ADCs mit einer Schleife auslesen und ausgeben kann... Bin für jede Hilfe dankbar. PS: Zur Zeit liest der mega8 den ADC 1 ein und gibt den Wert aus, den guck ich mir gerade mit einem Terminal an. Habe angefangen mit ASCII-Code die Ausagabe zu bearbeiten... Aber die Schleife bereitet mir noch viel Kopfzerbrechen.... Ansatz ? Danke
vitis_01 wrote: > Hätte bei der Verwendung von z.B. RS485 den Vorteil, dass Du > die Sensorinseln räumlich weit auseinander platzieren kannst. Hallo und danke für die schnelle Antwort. Hört sich interessant an, ich bin aber ein Anfänger und die Software ist noch etwas schwer für mich. Denke das erstmal einfache Schritte mich da weiterbringen werden. Dann kommt noch dazu dass ich nur wenige mega´s habe, da sind mega8, 16, 32 und 8535, die besagten TLC549, einige 74LS251 und einige PT1000, NTC und PTC, noch zu erwähnen sind einige LM34.... Nicht wenig aber auch nicht viel.. :-) Werde aber die Idee im Hinterkopf behalten....interessant ! Vielen Dank
@ Robert Breicher (Firma Privat) (eshidata) >Habe angefangen mit ASCII-Code die Ausagabe zu bearbeiten... Festkommaarithmetik >Aber die Schleife bereitet mir noch viel Kopfzerbrechen.... >Ansatz ? Wo ist das Problem? ADC-MUX umschalten, kurz warten, messen, Wert ausgeben Das in einer Schleife. MfG Falk
Hallo Falk, danke für die schnelle Antwort. Mein "kleines" Problem ist das ich Assembler-Anfänger bin und noch etwas "hincke"... Wo genau muss sie hin, was muss noch wann gemacht werden.... Etwas unsicher halt....und es dauert bis Klarheit aufkommt! Habe auch keinen Demo-Code um zu sehen wie die Profis sowas machen.... Hast Du etwas was mir den Weg zeigt, etwas Demo-Code ? Z.B.: 3 Ausgänge die alle Werte einer 3bit-Zahl-Wahrheitstabelle ausgibt oder das umschalten der mega8/16 Eingänge nach dem alle MUX geschaltet wurden oder einfach wie ich eine Schleife um diesen Demo-Code aus dem Tutorial lege.... Jede Hilfe ist willkommen :-) Danke
Die Messaufnehmer direkt mit einem MUX schalten würde ich nicht. Da es beim Widerstands-Messfühler (PT1000) zu Übergangswiderständen am MUX kommt, verfälscht das auch das Messergebnis. Noch schlimmer ist es bei Thermoelementen, da diese eine Vergleichsstelle brauchen (Klemmentemperatur wo das Element angeklemmt ist).
Thilo M. wrote: > Die Messaufnehmer direkt mit einem MUX schalten würde ich nicht. > Da es beim Widerstands-Messfühler (PT1000) zu Übergangswiderständen am > MUX kommt, verfälscht das auch das Messergebnis. Noch schlimmer ist es > bei Thermoelementen, da diese eine Vergleichsstelle brauchen > (Klemmentemperatur wo das Element angeklemmt ist). Hallo Thilo, danke für Deine Hilfe, könntest Du mir auch einen Ausweg nennen ? Wie soll ich dann bis 64 Thermo/Sensoren einsetzen ? Für jede Hilfe dankbar ! Vielen Dank
Ich bin grade dabei, eine Heizungssteuerung (Regelung) zu bauen, Solar & Schnickschnack, brauche da 10x PT100. Ich habe vor, für jeden Geber eine Konstantstromquelle (LM334) aufzubauen und das Signal für meine Bereiche auf 0..5V zu konditionieren. Umschalter kenne ich von meiner Arbeit, allerdings waren das sehr hochwertige Goldkontakte (1 Relais 275€). Für 64 Messtellen ist das natürlich ein extremer Aufwand. Es gibt auch von PHOENIX Messumformer in 6.3mm breiten Reihenklemmen, allerdings fallen da ca. 120€ pro Kanal an.
Hallo Thilo, danke für den Hinweiss aber das sprengt meine "Portokasse", leider... Ich benötige nur einen 64-Kanal-Thermometer um eine Schaltung (in der Entwicklung) überwachen zu können. Es gibt viele sogenannte "Hotspots" die ich überwachen muss, Leistungstransistoren, Traffos usw., die werden alle warm/heiss und ich möchte gucken ob die Lüftung ausreichend funktioniert. Dafür der Einsatz! Der mega16 und Konsorten mit einigen MUX würde für mich genau das Richtige sein, wenn... ich es schaffe (mit Euere Hilfe!) das der megaXX das macht was ich will/brauche. Eine einfache Idee um eine sogenannte Wahrheitstabelle (3bit-Zahl) an 3 Ausgänge auszugeben (um die MUX zu schalten) würde mir jetzt sehr helfen... Die MUX werden per 3bit geschaltet, also alle 8 Eingänge der MUX werden binär angesteuert, also muss der megaxx 3 Ausgänge dafür opfern, aber wie implementiere ich sowas in Assembler ??? Vielen Dank
>Die MUX werden per 3bit geschaltet, also alle 8 Eingänge der MUX werden >binär angesteuert, also muss der megaxx 3 Ausgänge dafür opfern, aber >wie implementiere ich sowas in Assembler ??? http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen Am besten Du arbeitest das Tutorial durch, anscheinend ist das Dein erstes Programm.
Du könntest dir mal den DG509 (Analogschalter) ansehen, evtl. mal eine Testschaltung damit aufbauen, vielleicht klappt das ja, die Geber zu multiplexen (zumndest die PTs)? Werde das interessehalber auch mal probiern, brauche ja auch ein paar Fühler. ;-)
jack wrote: > > Am besten Du arbeitest das Tutorial durch, anscheinend ist das Dein > erstes Programm. Hallo Jack, stimmt, es ist mein erstes Assembler-Programm.... Hocke alleine in mein Kämmerlein und grübbel vor mich hin und komme schwer weiter.... Bin sehr Dankbar für euere Hilfe. Vielen Dank PS: Ich bewege mich nur noch in den Tutorials..... Es ist dennoch sehr schwer für mich, zu viele "Unbekannten".... Danke
Lass' dir Zeit, da steckt mittlerweile viel dahinter. Es ist noch kein Meister vom Himmel gefallen (zumindest nicht mit Absicht). :-)
Hallo Thilo, habe von Fa. Conrad ein Bausatz mit 8 Eingänge, so ein billiger 8-Kanal-Analogwandler, der funktioniert einwandfrei. Es wurde ein mega48 eingesetzt, daran sind 8 Eingänge und es klappt alles super. Als Fühler verwende ich einen NTC/PTC, habe auch einen LM34 drangemacht, es klappt alles einfach. Jetzt wollte ich das selbe mit 64 Fühler aufbauen.... Deswegen diese Aktion. PS: habe auch einen PT1000 via Spannungsteiler dran gemacht, auch alles OK. Danke
Ja Thilo, da hast Du recht..... Danke für Deine aufbauende Worte.... Wenn ich bloß Demo-Code finden würde die mir das einfach erklären.... Dann klappt es auch sehr schnell... Vielen Dank
Kannste die Bestellnummer von dem Conrad-Bausatz mal posten? Evtl. kann ich da auch was draus machen.
Hallo Thilo, hier die Infos: 1. 10 BIT DATENERFASSUNGSSYSTEM - BST Artikel-Nr.: 190226 - 62 2. USB 10-BIT-DATENERFASSUNGSSYS. BAUSTEIN Artikel-Nr.: 191028 - 62 Beide liegen bei ca. 30€ - 35€. Dabei ist auch eine Demo-Software..... Ich habe das USB-Modul besorgt, damit klappt es sehr gut. Viel Spass/Erfolg damit. PS: Habe es gerade geschafft die ADCs per Variabel zu schalten. Habe also eine Variable angelegt, dieser eine binäre Zahl zugeordnet, diese Variabele als Initialisierung für das ADMUX eingetragen und voila... es geht. Jetzt kann ich, manuell erstmal, die ADC-Eingänge ein- und ausschalten wie ich es will. Werde alles in einer Schleife packen und schon wird der mega alle seine ADCs schön der Reihe nach auslesen... "Mühsam ernährt sich das Eichörnchen..."
Jo, der LTC1090 ist schon prima, nur, 8 Kanäle mit 10 bit haste auf vielen Atmels ja schon drauf. Ich habe meine Erfassung mit dem LTC1290 (12-Bit-Version) geplant. Muss aber noch testen.
12bit für Themepraturmessung ? Ist es nicht ein wenig zu viel des Guten ? Im Labor mag das gut sein aber für Deine "Consumer"-Anwendung.... Hauptsache es "funzt" :-) Viel Erfolg
jack wrote: >>Die MUX werden per 3bit geschaltet, also alle 8 Eingänge der MUX werden >>binär angesteuert, also muss der megaxx 3 Ausgänge dafür opfern, aber >>wie implementiere ich sowas in Assembler ??? > > http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen > > Am besten Du arbeitest das Tutorial durch, anscheinend ist das Dein > erstes Programm. Hallo Jack, Habe es gerade geschafft die ADCs per Variabel zu schalten. Habe also eine Variable angelegt, dieser eine binäre Zahl zugeordnet, diese Variabele als Initialisierung für das ADMUX eingetragen und voila... es geht. Jetzt kann ich, manuell erstmal, die ADC-Eingänge ein- und ausschalten wie ich es will. Werde alles in einer Schleife packen und schon wird der mega alle seine ADCs schön der Reihe nach auslesen... "Mühsam ernährt sich das Eichörnchen..." Vielen Dank noch mal.....
>12bit für Themepraturmessung ?
Hat schon sinen Sinn. Auch mit Mittelwertbildung.
Da hier einige Mischer (Stellantriebe) angesteuert werden, sollte das
Ganze nicht zu grob aufgelöst sein, da sonst die Stellantriebe ständig
am Laufen sind, was ziemlich auf die Lebensdauer geht.
Also 12 Bit = 4096 bei 5V/4096 = 0,00122V Oder bei einem Themp.Delta von 100°C/4096 = 0,024V / Step. Wenn jetzt der Step grober ist als dieser Wert dann ist die Auflösung zu hoch oder Du musst sie kappen... Mach ich da ein Denkfehler ? Ich gehe davon aus dass Du weisst was zu machen ist, es war einfach nur eine Denkübung für mich....fachsimpeln :-) Erst mal danke
Hallo Thilo, ich bedanke mich für heute, ich muss leider für heute Feierabend machen.... Morgen geht es weiter, da muss die Schleife her.... Ich bedanke mich sehr herzlich an alle die so hilfreich waren, ohne Euch währe der Anfang nicht zu schaffen. Vielen Dank & gute Nacht an alle ! Ciao
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.