ATmega8 - Metronom, Hilfe währe nicht schlecht

Christoph Stricker

Neues Mitglied
10. Mai 2012
3
0
0
Sprachen
Sehr geehrte Mitglieder von AVR-Praxis,

ich bin derzeit in der Schule, und muss für den Unterricht ein Metronom (4/4 und 3/4 Takt, erstes Viertel betont, BPM von 30-160 mit Poti regelbar, Ausgabe am Summer, Ausgabe Takt und BPM am Display) schreiben.
Nun sitze ich schon etliche Stunden am Programmcode, doch es will einfach nicht funktionieren. Falls jemand Zeit zum Einlesen hat, und einen Fehler o.Ä findet würde ich mich sehr freuen.
Ich will die 4.HTL nicht nochmal machen müssen, und das hämgt allein von dem Promgram ab.

Der Code ist im Anhang: Anhang anzeigen Metronom.zip
 
4htl?
naja dann mal los :D
dann brauchtse also:
lcd
Analogeingang mit Umrechnung auf BPM
und bisschen rechnen oder :D?
hab leider kein winavr,.
und kann kein C :D
 
Hi Christoph,

ich bin derzeit in der Schule, und muss für den Unterricht ein Metronom (4/4 und 3/4 Takt, erstes Viertel betont, BPM von 30-160 mit Poti regelbar, Ausgabe am Summer, Ausgabe Takt und BPM am Display) schreiben.
Nun sitze ich schon etliche Stunden am Programmcode, doch es will einfach nicht funktionieren. Falls jemand Zeit zum Einlesen hat, und einen Fehler o.Ä findet würde ich mich sehr freuen.
Ich will die 4.HTL nicht nochmal machen müssen, und das hämgt allein von dem Promgram ab.

Wichtigste Frage : wieviel Zeit bleibt dir denn noch ?

C ist leider nicht mein Gebiet. Da muß wohl mal ein anderer drübersehen. Aber das du das gesamte Projekt als Zip hochgeladen hast hilft schon mal sehr stark bei der Unterstützung :cool:

Gruß
Dino
 
Nun sitze ich schon etliche Stunden am Programmcode, doch es will einfach nicht funktionieren. Falls jemand Zeit zum Einlesen hat, und einen Fehler o.Ä findet würde ich mich sehr freuen.

Die Frage ist nach meiner Meinung viel zu allgemein gestellt.
Hast Du schon mal Schritt für Schritt getestet und Dich an den (ersten) Fehler herangetastet ?
Wenn die Ausgabe auf dem Display funktioniert, kannst Du ja leicht an diversen Stellen im Programm Variableninhalte anzeigen lassen und z.B. hier schreiben, daß das Einlesen des Potiwerts und die Ausgabe auf das LCD-Display klappt, aber z.B. die Anpassung des Timers nicht.

Was funktioniert denn im Detail nicht und welche Hardware wird verwendet?
 
Also zu den Fragen: Ich mache Mechatronik in der HTBLA (Höhere Technische Bundes Lehr Anstalt) Eisenstadt. Zeit habe ich noch bis zum 30.5.2012.

Hast Du schon mal Schritt für Schritt getestet und Dich an den (ersten) Fehler herangetastet ?
Wenn die Ausgabe auf dem Display funktioniert, kannst Du ja leicht an diversen Stellen im Programm Variableninhalte anzeigen lassen und z.B. hier schreiben, daß das Einlesen des Potiwerts und die Ausgabe auf das LCD-Display klappt, aber z.B. die Anpassung des Timers nicht.

Was funktioniert denn im Detail nicht und welche Hardware wird verwendet?

Naja, also ich habe es noch nicht durchgetestet, da mir auf dem Display auch nichts angezeigt wird, ausßer volle Pixelblöcke. Ich kann sagen, dass wenn das Poti komplett auf 0 ist der Summer durchgehend piept, jedoch wenn ich es weiterdrehe, verschwindet der ton sofort. Ich denke der Fehler liegt im ADC, jedoch scheint dabei alles richtig zu sein. Hardware ist das AVRboard mit ATMEGA 8 +Display:

AVR-Board.jpg

m.f.G.
 
Hi
Ich kann zwar kein C und den Assemblercode hast du auch nicht unter AVR Studio erstellt. Dennoch meine ich, das dein Metronom doch gewaltig viel unnötig Zeugs mit sich rumschleppt. Ich geh mal davon aus, du willst einen Taktgeber bauen. Das Display soll den Takt anzeigen, was auch immer.
Behandle erst einmal den Taktgeber und das Display getrennt. Ok, in Musik hab ich auch nicht sonderlich aufgepasst, aber ich geh mal davon aus, wenn du von 30 - 160 redest, sind das bis 160 Beeps, Pings oder Pongs in der Minute. Egal, das wär das zweite, was ich mir vor die Brust nehme. Den Ping, Pong oder Tick erzeugst du in einer separaten Unterroutine. Dazu folgendes:
Potiwert nicht in einer ISR einlesen, sondern pollen, das reicht Masse aus.
Die Intervalle erzeugst du in einer Timer-ISR. Dort zählst du einen Wert hoch und in Abhängigkeit der Mathematik mit dem Potiwert setzt du ein Bit. Im Hauptprogramm fragst du dieses Bit ab und ruft die Tick-Routine auf. Sie tickt und setzt das Bit zurück. Ich würd dieses nicht von der ISR aus aufrufen. Die eventuelle "Verspätung" von ein paar tausendstel Sekunden, hmmm ich weiß nicht, ob das so relevant ist. Versuch einfach modular vorzugehen.
Ausgabe auf Display: Dummywerte setzen und anzeigen, erst bei Erfolg weiter
Analogeingang lesen auf Display übertragen. Dazu Dummywerte weg und ersetzen durch generierte Daten. Dann bei Erfolg weiter
Anpassroutinen schreiben, die dir das gewünschte Format liefern. usw
Tick generieren und manuell ansteuern.
ISR aufbauen, die das Zeitereignis in Bitform an deine geprüfte Routine schickt. Bei Erfolg fertig !
Ist im Prinzip ganz einfach. Wenn man im Thema drin ist, sollten solche Einzelschritte doch nicht so schwer sein. Vielleicht seh ich's aber auch zu einfach.
Der 30.5. ist ziemlich nah... (oh Gott. ich muss auch noch meine Steuer machen..)
Ich weiß nicht, was schneller geht, Programm neu aufsetzen oder Fehlersuche. Du steckst da mehr drin, aber meine Erfahrung ist :
Auch wenn man neu aufsetzt, muss es nicht länger dauern und die beschriebene Vorgehensweise erlaubt dir, Abschnitte zu testen und abzuhaken.
Ich hab mal eine Maschinenautomatik auf ein anderes System übertragen müssen. Natürlich lief nix so wie gedacht. Da hab ich kurzerhand entschlossen, ein neues Programm aufzusetzen. Nach eineinhalb Tagen stand eine gut nachvollziehbare funktionierende neue Automatik. Wären wir beim alten Programm geblieben, sicher, irgendwann wär es gelaufen, aber nachvollziehen hätt es vermutlich keiner mehr.
Noch viel Erfolg
Gruß oldmax
 
Hallo Christoph,

Also zu den Fragen: Ich mache Mechatronik in der HTBLA (Höhere Technische Bundes Lehr Anstalt) Eisenstadt. Zeit habe ich noch bis zum 30.5.2012.
das heißt dann wohl Nachtschicht und Überstunden :flute:

Naja, also ich habe es noch nicht durchgetestet, da mir auf dem Display auch nichts angezeigt wird, ausßer volle Pixelblöcke.
Dann bring zuerst mal ein Basisprogramm nur mit dem Display und nem "Hello World" zum laufen. Dann kannst du wenigstens Debug-Infos ausgeben (Variableninhalte, ...)

Ich kann sagen, dass wenn das Poti komplett auf 0 ist der Summer durchgehend piept, jedoch wenn ich es weiterdrehe, verschwindet der ton sofort. Ich denke der Fehler liegt im ADC, jedoch scheint dabei alles richtig zu sein.
Das kannst du dann als zweites zum laufen bekommen wenn das Display läuft. Laß dir auf dem Display einfach mal die Werte anzeigen die der ADC mißt.

Dann geht es Stück für Stück weiter.

Halt dich ran!

Gruß
Dino
 
Wie oldmax und dino ja schon geschrieben haben - schrittweise Vorgehensweise ist das a&o.

Wenn Du nur
Code:
lcd_init();
   lcd_home();
   lcd_writes("Beat:");
laufen lässt, sollte ja auch "Beat" auf dem Display stehen - oder etwa nicht ?

Wenn Du jetzt nur volle Pixelblöcke auf dem Display siehst, achte mal besonders darauf, daß die anzuzeigenden Strings auch immer sauber mit 0x00 terminiert sind und Du dafür auch ein byte mehr definiert hast. Die Ausgabe auf das Display sollte dank der LCD-Library ja recht einfach sein.

Termin 30.5. - wenn ich Dein Programm so ansehe, mußt Du ja C nicht erst erlernen - da besteht doch noch eine Chance auch ohne Nachtschicht ;)
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)