July 22nd, 2017

Fehler bei AVR ISP Parallel-Programmieradapter0

Ich habe bereits zweimal den scheinbar unerklärlichen Fehler gehabt, dass bei einem Flashvorgang der AVR plötzlich nicht mehr antwortet. Nach viel Kontakt mit Atmel und einigen Profis konnte ich den Fehler trotzdem nicht lokalisieren.

Vor einigen Tagen nun habe ich mich mit einem Elektroniker unterhalten, der diesen Fehler auch hatte und genauer nachgeforscht hat. Es wurde in beiden Fällen der Programmieradapter von Robotikhardware verwendet. Hier wurde allerdings ein einfacher Schaltplan von früher verwendet, der sich damals weit verbreitet hatte. Hier fehlt eine Diode um die Spannung auf 5V zu begrenzen, denn RS232 hat ja einen höheren Pegel als 5V. Bei einer bestimmten Kombination von Code wird der Massepegel des AVR abgesenkt und daher der Spannungspegel über 5V angehoben. Das passiert nur wenn die Pegel zweier aufeinanderfolgenden Befehle die maximale Differenz haben. Da ist der Port nicht schnell genug und durch die fehlende Diode entsteht kurzzeitig ein Peak von mehr als 5V. Das ist der Grund warum der AVR unvorhergesehen kaputt geht.

Tags: , ,


Inkrementalgeber Auswertung6

Die Zeit der Taster oder sogar Bedienkreuze ist schon lange vorbei. IMG_5950Seit vielen Jahren werden in Radios, Navis, Handys,etc. so genannte Inkrementalgeber (encoder) eingesetzt. Mit Knopf oder ohne (Taste). Immer öfter werden diese kleinen Dinger auch im Hobbybereich interessant und verwendet. Die Ansteuerung in der Firmware ist zwar recht einfach, jedoch möchte ich euch den Weg erleichtern, so dass keiner das Rad zweimal erfinden muss.

Es ist empfehlenswert die im Datenblatt angegebene Beschaltung mit Entprellung und Strombegrenzung aufzubauen, falls keine vorhanden ist: 10k gegen Vcc, 10k zum µC-Pin und 100nF gegen GND. Die Abfrage gestaltet sich per Interrupt am sinnvollsten, denn wenn man den Flankenwechsel detektiert hat sollte sofort der Level des anderen Signals abgefragt werden. Meist bekommt man vom Hersteller nur so ein winziges Diagramm:

phase_diag

Es ist ja schon aussagekräftig, allerdings dauert es ein paar Minuten bis man mit der richtigen Sichtweise darauf schaut. Es gibt vier Fälle, je zwei pro Drehrichtung. Man lässt Signal A per Levelchange Interrupt Triggern und fragt danach Signal B ab. Hier ein Beispiel: Signal A steigende Flanke. Wenn dann Signal B low ist, dann war es eine ClockWise Rotation. (Zeitpunkt zwischen T2 und T3, C.W.) Hier die ISR:

code_a Immer daran denken: Variablen auf die in der ISR zugegriffen werden soll als volatile deklarieren!

Tags: , ,


Imhotep theme designed by Chris Lin. Proudly powered by Wordpress.
XHTML | CSS | RSS | Kommentare-RSS