Hallo Leute! Der Analog/Digtal Wandler meines ATmega16 ärgert mich. Vielleicht hat ja jemand eine Idee, warum er mich so ärgert. Ich will über ein entsprechenden Port des A/D Wandler ADC0...ADC7 eine Gleichspannung zwischen 0...5V anlegen und dann wandeln. Habe mir dafür ADC0 ausgesucht, habe an diesen zur Sicherheit noch einen Pull-Down Widerstand gegenüber Masse angeschlossen. An AVcc habe ich 5 Volt angelegt damit der Wandler seine Spannung bekommt (Ref.Spannung). Habe dann ein tolles Programm geschrieben was im Dateianhang ist, laut meinems Programms bekommt der DAC des ADCs eine Referenzspannung von 5 Volt(laut ADMUX). Ich Teile die Ozsilator-Freguenz und simuliere über JTAG ICE das Programm und bekomme so richtig blöde binäre Werte, mal keinen mal halt ein so blöden. Die nicht mit meinem Eingangswert am ADC0 zu tun haben,wenn ich sie umrechne. Woran habe ich nicht gedacht? Jens
Hallo! Kenn mich auch nicht so gut aus, aber Du könntest statt jmp mal rjmp probieren.
Du sollst doch abwarten, bis ADC es schafft ein Ergebnis zu kriegen, das geht ja nicht im Moment. Du hast noch dazu eine niedrige Frequenz ausgewaehlt (XXXXX110 - division factor 64). Deshalb ist ja noetig, dass du abwartest bis ADIF mal 1 wird. Und in diesem Fall ist ja auch sinnvoll Free Running Select zu aktivieren, schaetze ich...
Jens, schau dir doch erstmal Programme anderer ASM-Programmierer an, die auf ADC zugreifen. Das JMP in der (nicht vorhandenen) Sprungtabelle ist schon richtig, das andere darf auch ein RJMP sein, ist aber so nicht falsch. Das hat mit der Größe des Flash-Adressraums zu tun, ab 16KB sind für die Vektoren 2 Adressen (2 Worte, 4 Bytes) reserviert weil RJMP nur eine begrenzte Reichweite hat und JMP zwei Worte benötigt. Ansonsten ist dieses Programm ein gutes Beispiel dafür, wie man es nicht macht (kein Grundtakt mittels Timer, kein Stackinit, keine bzw. unsinnige Kommentare...). Also schau erstmal, wie es andere machen und fang dann nochmal an. ...
Das war aber nicht die Antwort auf die Frage Hannes. Es tut mir leid wenn du dich nur gern mit Deinesgleichen unterhälst. Aber auch du bist nicht mit dem Wissen von heute geboren worden. Das solltet du dir mal vor Augen halten und dann vielleicht noch einmal nachdenken. Also Merke: "Vor Inbetriebnahme des Mundwerks Hirn einschalten !!!" -> sollte auch im Raum Magdeburg gelten. To Jens: Leider kann ich dir mit diesem Problem nicht weiterhelfen - Assembler ist nicht meine Stärke. Ich hoffe aber trotzdem das sich hier irgendjemand findet, der dir auch ohne "fachgerechte Kommentierung" (eines richtigen Pogrammieres) des Files weiterhelfen kann.
@A-trox: Danke für die Blumen... Das geht da aber dito, denn du hast außer unsachlichen Beschimpfungen auch nichts zum Thema beigetragen. Die angefangene Art des Programms führt in eine Sackgasse. Das stimmt hinten und vorne nicht. Es ist nicht damit getan, einige "vermeintliche Fehler" zu nennen, da gehört ein anderes Konzept her. Da dieses Thema hier schon öfters lief, sind auch einige Beispiele (mit Code) vorhanden. Man könnte z.B. mal in der Codesammlung beginnen, sich Programme anderer Leute (und die Reaktionen darauf) anzuschaun. Nein, ich bin nicht mit dem (wenigen) Wissen von heute geboren worden. Vielmehr habe ich mir dieses Wissen durch mühevolles Lernen von Grundlagen angeeignet und habe nicht in irgendwelchen Foren nur irgendwelche Schlagworte und Tricks zusammengefragt. Ich bin gern bereit zu helfen, indem ich konkrete Fragen beantworte. Es kann aber nicht von mir verlangt werden, dass ich ein komplettes persönliches Tutorial schreibe, nur weil der Hilfesuchende keine Lust hat, mal über den Gartenzaun zu schaun. Übrigens denke ich, dass ich schon damit geholfen habe, dass ich auf einige fehlende Dinge hingewiesen habe. Leider habe ich im Moment kein konkretes Beispiel für ADC und Mega16 fertig, sonst hätte ich es zur Verfügung gestellt. Die einfachste Möglichkeit, auf ADC zuzugreifen, wäre folgende: - ADC im Freerun-Mode starten, dabei in Abhängigkeit vom Controllertakt einen Vorteiler einstellen, der einen ADC- Eingangstakt von 50kHz...200kHz ermöglicht. - ADC-Quelle mit ADMUX einstellen - ADC Zeit zum Wandeln lassen - ADC auslesen (in reg1,adcl in reg2,adch) und verarbeiten - neue Messquelle in ADMUX einstellen - ADC Zeit zum wandeln lassen - ADC auslesen und verarbeiten... Man könnte mit einer Warteschleife die Wartezeit erzeugen, aber das ist die schlechteste Lösung. Man kann in einer Schleife das Bit ADIF in ADCSRA abfragen (Datenblatt Mega16 Seite 217), bis es gesetzt ist und erst dann die Werte auslesen, diese Lösung ist aber nicht gut, weil des gesamte Programmablauf ins Stocken gerät, falls der Mega16 später mal mehr machen soll. Nun kann man das ADIF-Flag zum Auslösen eines Interrupts nutzen. Das erfordert aber das Einhalten einiger wichtiger Regeln. - Interrupt-Vektor-Tabelle anlegen - Stackpointer initialisieren - Programm in Reset-Routine, Mainloop und ISR aufteilen Man kann auch einen Timer so programmieren, dass er in regelmäßigen Abständen (z.B. 10ms) einen Interrupt auslöst. Das Auslesen des ADC geschieht dann neben anderen Dingen ganz nebenbei in der Timer-ISR. Auch hier sind die genannten Regeln einzuhalten. Übrigens kommt keines meiner Programme ohne diesen Timer-Interrupt aus. Ich halte das für den Anfang für die beste Lösung. ...
Danke! für euere Beiträge und auch ein Danke an A-trox,für die unterstutzenden Worte! Das Programm was ich hinterlegt habe ist ein Teil eines großeren Programms. Danke für den Hinweis mit "jum und rjump" die Thematik ist mir bekannt, zwecks der Wortgröße. Weiter an den Schlauberger HanneS, der so tolle Wort von sich gibt; Den Stackp. habe ich schon am Anfang meines großen Programm initialisiert. Das mit dem Free Running habe ich mir auch schon überlegt aber habe's verworfen Aufgrund der Stuktur des Progammes und zusatzlich spare ich Energie wenn ich den Wandler ausschalte. Nicht war!Ist hier im Test-Proramm nicht zu sehen. Ich teile meine Takt-Frequenz die etwa bei 8MHz liegt, mit einem Teiler von 64, so komme ich bei etwa 125kHz raus, was ja zwischen 50 und 200 kHz liegt, zwecks genauer Werte. Der Teiler wird ins ADSCRA Register geladen. Guck's du!Im ADMUX Register werden die Eingänge für den ADC festgelegt und die Ref. Spannung für Digital/Analog Wandler des ADC's.Guck's Du! Und eine Schleife du Schlauberger ist im Testprogramm enthalten, wieder Guck's Du, denn wenn der ADC gestartet wird ist das Bit ADSC so lange gesetzt bis die Wandlung abgeschlossen ist und wird dann auf Null gestetzt, meines Wissen. Mir ist auch bekannt das die Daten wenn sie bereit gestellt sind im ADCL & ADCH, dass Bit ADIF gestetzt wird. Und diese Schleife ist für jemand der sich auskennt auch ohne Kommentar zusehen. Was mich nun zu den vermissten Kommentaren kommen lässt, die habe ich bewusst nicht mit aufgeführt. Ist eine Fehler im Programm, verwirrt dann auch fehlerhafter Kommentar,dachte ich mir! Wie man sieht ist Hirn eingeschalten und das gebe ich jetzt gern weiter, denn wär was drauf hat könnte sich so was denken. Oder zu mindestens Fehler erkennen, wenn sie dann da sind! Ich bin jedoch immer für konstruktive Lösung und Vorschläge offen.Und Hirn ist eingeschaltet. Jens PS.: Auch und wo ich Schleife in Anführungstriche hin geschrieben habe ist eine Zählerschleife für das Auslesen der Daten an den Ports gedacht, zum Test. Die habe ich nicht mit rein geschrieben. Und das Programm ist nur ein Testprogramm was in das große Programm ein gefügt ist, aber ohne Zählerscheife und Rücksprung siehe vorletzte Zeile.
a) Wenn du alle Informationengenannt hättest hätte man auch sinnvoll antworten können b) sinkt die hilfsbereitschaft wenn man Leute als Schlauberger bezeichnet c) Wenn du alles so gut und richtig gemacht hast muß es ja gehen d) war von Energiesparen überhaupt keine rede Ich habe es bei meinem Mega16 mit dem ADC und Interrupt gemacht, das geht auch ohne Probleme, villeicht leigt das problem auch viel tiefer in deinem Programm das kann (und will jezt warscheinlich auch niemand mehr) aus einem zusammengestückelten Fragment (Was nichtmal als solches gekennzeichnet ist) rauslesen.
Nunja, bei mir Schlauberger funktioniert's... Ich konnte übrigens nur auf die im ersten Posting genannten Informationen reagieren. Wenn du da Informationen zurück hältst, dann ist das nicht mein Problem. Mach weiter so... ...
Also gut das sieht er ein zwecks der wenigen Info's, aber ein Roman wollte ich nicht schreiben. Das dachte ich mal setzte ich voraus. Jetzt weis er's. An Läubi: Du hast recht. Aber wenn ich in den Antworten lese, das man Hirn einschalten soll, also ich. Dann ist für mich Großkotzigkeit und dann reagiert ich halt giftig. Entweder ich antworte ordentlich oder ich lass es. Dann ist der HanneS halt ein Schaulberger ----> nicht war Schlaubberger HanneS. HanneS oder doch Schlauberger? Schön das es bei Dir funktioniert, freue ich mich. Ich schau mir morgen nochmal das ganze an, vielleicht sieht ich ja den Wald vor lauter Bäumen nicht mehr. Jens
Hallo großer JENS... Schau dir lieber nochmal an, wer was geschrieben hat. Das mit dem Hirn einschalten ist nicht von mir, ist nicht meine Art. Trotzdem beschimpfst du mich dafür. Aber vermutlich beschimpfst du mich ja garnicht, das scheint wohl dein normaler Umgangston zu sein. Damit wirst du es vermutlich sehr weit bringen. Mach weiter so... Kannst aber ruhig glauben, dass es funktioniert, siehe Anhang... ...
>>Das war aber nicht die Antwort auf die Frage Hannes. Es tut mir leid >>wenn du dich nur gern mit Deinesgleichen unterhälst. Du solltest mal noch ein paar andere Posts hier lesen, dann wirst Du feststellen, dass Hannes auch den Anfängern hilft und sich keinesfalls "zu schade" ist. >>Aber auch du bist nicht mit dem Wissen von heute geboren worden. >>Das solltet du dir mal vor Augen halten und dann vielleicht noch >>einmal nachdenken. Ich kann nur sagen, hierfür gilt noch einmal genau das Gleiche wie schon ein paar Zeilen weiter oben geschrieben. >>Also Merke: "Vor Inbetriebnahme des Mundwerks Hirn einschalten !!!" Tja, wer im Glashaus sitzt...lieber selber mal die 3 Zellen aktivieren...
@Hannes wie machst du HEX mit normalen 7 seg anzeigen? Ich mein bei B und D hat man doch das problem das man nicht weis obs nicht ne 0 oder 8 sein soll oder? (fällt mir grad auf dem Bild auf) :)
@Läubi: Das Platinchen mit der Anzeige ist schon sehr alt. Die Teile (außer Lochrasterplatine und (nicht benutzte) Anschlussbuchse) stammen noch aus DDR-Zeit. Und somit auch die Decoder-ICs V40511. Und die decodieren nunmal ordentliche (eindeutige!) HEX-Zeichen. (Es war nicht alles schlecht...) Jetzt zu AVR-Zeiten habe ich mich an das Teil erinnert und ein Flachbandkabel mit 10-poliger Pfostenbuchse angelötet, somit geht das Teil als "Zusatzgerät" für das STK500. ;-) b und d werden übrigens als Kleinbuchstaben angezeigt, bei der 6 wird der obere Balken mit angezeigt, als Unterschied zum b. ...
Ah klar das ist garnichtmal so doof, werd ich mir mal merken, das mit den kleinbuschstaben und dem Strich für die 6 dan paßt es ja wunderbar, vielen Dank :)
@Hannes: Na, einen vernünftigen Binär zu Hex-Decoder hatten "wir" damals auch schon... Die runden Dinger links sind deine 8 Poti? Bei mir sehen die Aufbauten auch alle so ähnlich aus... der "Baukasten" wächst auch regelmässig (verschiedene Tastaturen, Anzeigen und Schrittmotor-Treiber...) Nimm dir die unqualifizierten Kommentare irgendwelcher Leute, die "mal auf die Schnelle" irgendwas zusammenbauen wollen nicht zu herzen (Machst du eh nicht, so wie ich dich kenne). Manchen Leuten würde ich den Link hier empfehlen: http://www.atmel.com/dyn/resources/prod_documents/novice.pdf
Wozu fragt er ueberhaupt, wenn er keine normale Loesung sieht und nur Beschimpfungen ernst nimmt? Manchmal tut mir echt leid, dass ich meine Zeit fuer die Menschen dieser Art verschwende...
> Na, einen vernünftigen Binär zu Hex-Decoder hatten "wir" > damals auch schon... Ja sicher, nur war es sehr schwierig, den 4311 zu bekommen. Ist aber egal, heute würde ich so eine Anzeige mit AVR aufbauen, und das, wozu sie genutzt werden soll, gleich mit rein... > Die runden Dinger links sind deine 8 Poti? Nicht ganz, die Trimmpotis (RT 10) sind darunter. Die runden Dinger sind zu Drehknöpfen umfunktionierte (alte) Kanülenhalter meiner Insulinspritze. ;-) > Nimm dir die unqualifizierten Kommentare irgendwelcher Leute, > die "mal > auf die Schnelle" irgendwas zusammenbauen wollen nicht zu herzen > (Machst du eh nicht, so wie ich dich kenne). Neee, beim besten Willen nicht... Die machen sich doch nur lächerlich. Sind scheinbar neidisch, dass Andere mehr Wissen haben (mir ist aber bewusst, dass ich verdammt wenig weiß). Dabei könnten sie das ganz schnell ändern, indem sie etwas lernen würden. (Grund-) Wissen kann man nunmal nicht kaufen, da muss man selbst etwas tun. Und das ist gut so! > Wozu fragt er ueberhaupt, wenn er keine normale Loesung sieht und > nur Beschimpfungen ernst nimmt? Nunja, er "arbeitet" mit JTAG und kann zum Wochenende nicht darüber verfügen. Also ist es Ausbildung oder Beruf, jedenfalls kein Hobby. Da hätte man eigentlich nur mit einem Link auf www.hausaufgaben.de antworten dürfen. ;-) Aber was soll's, Leute,die fremdes (geistiges) Eigentum vermarkten, wird es immer geben. Das ganze System baut schließlich darauf auf... ...
Danke HanneS für die Größe! Aber so groß bin ich nicht. Scheiße da habe ich mich bei den Antworten, woll etwas verlesen ---> Schuldigung wegen dem Hirn einschalten. Aber die Antwort, die du dem A-trox gegeben hast, fand ich halt so von oben herab. Dabei ging's ja auch um mein Problem. Aber ich habe wieter so gemacht..........und der A/D läuft jetzt; fast so wie ich's will. Ich mach wieter so....... nicht war :-). JENS
> Danke HanneS für die Größe! Nunja, die Größe bezog sich nur auf die Schreibweise deines Namens. Bei mir ist ja nur Anfang und (dickes) Ende groß, bei dir aber alles... ;-) > Aber die Antwort, die du dem A-trox gegeben hast, fand ich halt so > von oben herab. Dabei ging's ja auch um mein Problem. Diese Antwort hat er aber selbst provoziert. kann selbst nix zur Lösung des Problems beitragen, kann nur andere Leute beschimpfen. Und mal ehrlich, bei dem Code, den du uns im ersten Posting vorgesetzt hast, konntest du auch keine andere Reaktion erwarten. > Also gut das sieht er ein zwecks der wenigen Info's, aber ein Roman > wollte ich nicht schreiben. Das dachte ich mal setzte ich voraus. > Jetzt weis er's. Wer soll was einsehen? Ich etwa? Wenn ja, dann hast du sicher etwas verwechselt. - Nicht ich bat um Hilfe, sondern du. - Nicht ich sorgte durch Code, der nicht den Tatsachen entspricht, für Missverständnisse, sondern du. - Nicht ich bin frech geworden, sondern A-Trox und du. - Nicht ich habe Anderen unwahre Aussagen unterstellt, sondern du. Also wenn hier einer etwas einsehen müsste, dann bin ich das mit Sicherheit nicht. Übrigens hätte dein letzter Beitrag auch einmal gereicht,.. ...
An HanneS! Nein Da hast du was falsch verstanden, die Einsicht ist auf meiner Seite nach dem lesen der gewissen Antworten und Fragen. Die Größe hab ich schon, wenn was nicht Ok ist, dass ich es einzusehe. JENS
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.