Kommunikation über 1 Kabel

...
Meiner Meinung sollte es am sinnigsten sein, wenn ATMEL die entsprechenden Möglichkeiten direkt ins AVRStudio integriert - unter Ausnutzung des verwendeten Programmers (bzw dessen Möglichkeiten).

AMEN!

Ich finde die AVR Chips ja echt genial. ARM scheint auch sehr gut zu sein, aber das wäre mir zu viel. (zumindest ohne RasPi Platine drunter ^^)
Aber es gibt die verschiedensten Programmer (auch von offizieller Seite) dafür, aber jeder hat Nachteile. Ja, ich mit meinem debugWire werden sich jetzt bestimmt einige denken die mich kennen, aber viele der anderen Programmer haben auch garkein HVPP/HVSP Support. All das hat der Dragon, aber dafür kein TPI (ist anscheinend auch nicht geplant) und anders als fast alle anderen ist damit das Feintuning von OSCCAL nicht möglich. Alles irgendwie suboptimal.

Daher auch meine etwas komplexere Idee. Wobei ich meinen Tiny13 mit nur 5 oder 6x flashen (via try&error) sehr gut einstellen konnte.

Wobei ... Ich weiß garnicht wie schnell der Timer eigentlich counten kann. Sagen wir einen MegaXYZ mit 20MHZ. Würde der z. B. 10MHz stabil counten können oder geht der da in die Knie? Würde mich mal interessieren, vielleicht hat das ja schon mal wer gemacht. Zum kalibrieren natürlich nicht benötigt, aber man könnte dann ja auch gleich einen Frequenzzähler mit einbauen :)
 
Das hast Du jetzt vielleicht falsch verstanden gehabt: die erste der AppNotes verwendet SPI-ISP und JTAG (beides kann der Drachen, der kann doch nur TPI nicht), aber dort sind eben nur'ne Hand voll Controller angegeben, und eben auch nur STK500 (ist ja strenggenommen AVRISP I), AVRISP I und II, JTAGICE I und II.

Letztendlich ist das mit jedem Programmer umsetzbar (wobei der natürlich selbst 'ne Akurate Clock haben muß). Aber ich will eben in meinen Programmer keine inoffizielle Firmware schreiben. Folglich muß ich also auf ATMEL warten (oder darauf verzichten).

Man kann natürlich sowas ähnliches auch selbst erreichen, ohne daß der Programmer die Impulse erzeugt, abr der Vorteil ist hier, daß wir den Programming-Mode zur Kommunikation nutzen (zur Erinnerung: Der Programmer programmiert das Kalibrationsprogramm ins Target, gibt den Reset frei, und generiert die Zeitimpulse (Clock-Leitung der Programmierschnittstelle). Das Target (Programm) versucht einen geeignetten OSCCAL (passend zu den Impulsen) zu finden, und signalisiert das an den Programmer (Datenleitung). Außerdem wird das Ergebnis im Eeprom/Flash (SPM) des Targets abgelegt (vorher natürlich).
Der Programmer erzwingt wieder den Programming Mode (Reset), und kann jetzt (über die Programmierschnittstelle) den ermittelten OSCCAL aus Eeprom/Flash auslesen.)
Das heißt, das Verfahren funktioniert auch mit Targets, die keinerlei Kommunikationsschnittstelle (eben bis auf das Programmierinterface) besitzen. Man braucht lediglich 'ne Möglichkeit das irgendwo nichtflüchtig zu speichern.
Aus dem Studio heraus ließe sich das (wenn ATMEL das so umsetzen würde) quasi als Ein-Klick-Möglichkeit machen:
  1. vorhandenes Programm/ggf Eeprom auslesen abspeichern
  2. anhand des Targets und Programmers entsprechendes Kalibrationsprogramm ins Target
  3. Impulse senden, und kalibrieren lassen
  4. ermitteltes OSCCAL aus Flash/Eeprom zurücklesen
  5. gesichertes Programm/Eeprom wiederherstellen
möglicherweise macht eine (Compiler)Variable Sinn, die die Eeprom-Adresse vorgibt, an die der Kalibrationswert am Ende geschrieben werden soll. Wurde diese Variable also im Originalprogramm gesetzt, wird der Wert (also die Adresse) auch vom Kalibrationsprogramm verwendet.

Natürlich kann man so eine Kalibrationsroutine bei großen Controllern auch irgendwo neben dem Code platzieren, und im Bedarfsfall zur Laufzeit ausführen lassen - andererseits kann man bei großen Controllern meist auch problemlos 'ne genauere Taktquelle nutzen.

Wenn Du das trotzdem selbst irgendwann mehr oder weniger universell angehen willst, sehe ich folgendes Problem:
Du kannst aus der definitionsdatei heraus nicht ableiten, welche RC-Oscillator-Version Dein Target hat. Device, Signatur usw steht drinn - selbst die Core_Version (quasi die möglichen Instruktionen - oder folgt daraus auch der verbaute interne Oscillator?).

Du mußt also blind den Timer (wenn vorhanden 16bit) einstellen (Prescaler=1), und die Schritte zwischen den Impulsen zählen, und durch stupides ausprobieren OSCCAL annähern lassen (weil Du die Wirkung des MSB ja nicht kennst).
 
Hier mal mein aktueller Stand:

Der Code läuft jetzt mit 2 Bytes: DeviceID und (Hard-)PWM Wert. Ich hab 2 davon an der TxD Leitung, klappt soweit alles perfekt. Sind aber noch ein paar DEBUG und TODO Kommentare drin (Parity und Majority, vielleicht schaff ich das heute mal endlich).

Läuft jetzt bei mir jetzt auf nem ATtiny13.

Meine Testanwendung hab ich dafür dementsprechend angepasst. Die hab ich als Source und .exe mit beigefügt.
Anhang anzeigen ComPwm.zip


Zum Thema OSCCAL. Stimmt, der Drachen hat sogar die Option (anders als die AppNote behauptet hat). Aber die Umsetzung ist echt grauenhaft finde ich. Außerdem kann man den damit nur auf die dafür vorgesehene Frequenz trimmen. Sonderwünsche gibts nicht.

Aber ich denke mal, wenn ich etwas mehr Zeit habe wird das ein eigenes Projekt mit einem eigenem Thread :)
 

Ü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)