Programmierung von ATMEL-AVR-Mikroprozessoren

  • Wer kann mir Tips / Empfehlungen zukommen lassen zur Programmierung / Einsatz von ATMEL-AVR-Mikroprozessoren. (Literatur, Anwendungsbeispiele, etc.)


    73, Werner, DH3RW

    Einmal editiert, zuletzt von DH3RW ()

  • Zitat

    Original von DH3RW
    Wer kann mir Tips / Empfehlungen zukommen lassen zur Programmierung / Einsatz von ATMEL-AVR-Mikroprozessoren. (Literatur, Anwendungsbeispiele, etc.)


    73, Werner, DH3RW


    Hallo Werner,


    ich habe mal hier im Forum die "Suche" Funktion mit dem Suchwort "Atmel" benutzt. Vielleicht hilft dir dieser thread weiter.

    73/2 de Peter, DL2FI
    Proud member of Second Class Operators Club SOC and Flying Pig Zapper #OOO (Certificated Kit Destroyer)

  • Hallo Werner,


    ein toller Link ist:


    http://www.mikrocontroller.net


    Dort findest Du ein für Einsteiger sehr empfehlenswertes Tutorial (AVR-GCC-Tutorial), wie man mit der Programmiersprache C, die kleinen Dinger zum Laufen bekommt.


    Auch im Forum werden eine Menge hilfreicher Tipps gegeben!
    Viel Spaß damit.


    Gruß Karl, DK4ARL

  • Hallo Werner,


    da kann ich dir nur einen Autoren empfehlen: Roland Walter, DL7UNO. Du findest seine Publikationen zwar auch kopiert im Netz, aber die Originale sind immmer noch die besten Quellen


    1. Serie im Funkamateur 4/02 bis 11/03
    2. Buch AVR-Mikrocontrollerlehrbuch 39 Euro (z.B. FA-Leserservice Z-0010)
    3. Webseite http://www.rowalt.de


    Roland führt den Interessierten so durch die Thematik, dass er am Ende nicht nur mit einem speziellen AVR umgehen kann, sondern auch relativ schnell mit anderen Typen klar kommt.


    73/72 de Ingo, DK3RED - Don't forget: the fun is the power!

  • Hallo Werner,


    ich würde auch die auch im Funkamateur erschienen Serie von Roland Walter, auch verfügbar auf http://www.rowalt.de , empfehlen. Sie ist sehr anschaulich und liefert ein anwendbares Ergebnis. Der Umstieg auf neuere AVR-Typen ist danach mit geringem Aufwand machbar. Auch das dort empfohlene kostenfreie (bis 4kByte Programmcode) Tool Bascom arbeitet sehr effektiv und anschaulich (es ermöglicht mit Grenzen die Programmsimulation auf dem PC ohne AVR-Hardware), desgleichen der simple Programmieradapter an der parallelen Schnittstelle. Allerdings kommt man kaum darum herum, auch mal in die (englischen) Datenblätter des verwendeten AVR-Types zu schauen, die meist so zwischen 400 und 500 PDF-Seiten umfassen.
    73 Reiner

  • Hallo.


    Ich suche einen Assembler Source für ATMEL 8-Bit RISC zur seriellen Programmierung eines AD9851 DDS. Die parallele Frequenzeingabe mit einem Port des AT90S8515 funktioniert anhand eines von mir geschriebenen Assemblerprogramms aus dem STK500 heraus einwandfrei, doch ich möchte gerne PINs sparen, um kleinere Prozessoren einsetzen zu können.


    Der DDS ist fertig aufgebaut und funktioniert bereits mit der PC Software von DL5MGD. Die serielle Frequenzeingabe geht also zumindest vom PC aus über drei PINs des Druckerports.


    Leider stimmt bei mir aber irgendwas mit der seriellen Frequenzeingabe über den RISC Prozessor nicht. Deshalb meine Frage, ob mir vielleicht jemand behilflich sein kann, bevor ich das Rad neu erfinde.


    Ich suche also einen Assemblersource, in dem das Timing und die serielle Datenübertragung vom ATMEL Risc Prozessor in den DDS AD9851 realisiert ist.


    Herzlichsten Dank schon mal für die Mühe.


    73 de Rolf
    DL6MBI


    Vielleicht noch zur Erläuterung: Ich habe mir einige dieser AD8302 Phase/Gain Detektoren besorgt. Damit baue ich derzeit einen vektoriellen Netzwerkanalysator bis 30 MHz auf, der als Open-Project für Funkamateure gut geeignet ist. Es gibt das zwar schon in verschiedenen Ausführungen. Ziel ist aber, daß man keinen PC mitschleppen muß, wenn man mal an der Antenne messen will. Die 40 dB Dynamik des Phase/Gain Detektors reichen da meiner Ansicht nach völlig aus. Aber ohne Software gehts halt auch nicht ganz...

    Einmal editiert, zuletzt von DL6MBI ()

  • Hallo Rolf,


    für einen AD9951 habe ich seinerzeit einen 8515 in Assembler programmiert
    für einen Kurzwellen "VFO" für 70-100MHz. Die serielle Übertragung ist
    ebenfalls wie beim AD9851 40Bit, wenn ich mich recht entsinne.


    Als Vorlage diente für mich ein Artikel in der Funkamateur "2m VFO",
    allerdings war dieser in "C"-geschrieben. Da ich dieser Sprache nicht
    mächtig war, habe ich meine Anwendung in Assembler geschrieben.


    Wenige Monate später habe ich mich dann entschlossen es ebenfall
    in C zu programmieren. Ich kann nur dazu raten, es beginnt Spaß
    zu machen und die "Bitsucherei" hat ein Ende.


    Wenn Interesse besteht, kann ich dir den Code zukommen lassen.


    Gruß


    Clemens

  • Hallo.


    @Lutz. Vielen Dank für den Beitrag. Ich kannte den Beitrag bereits, trotzdem vielen Dank für Deine Mühe.


    ----------


    @Clemens


    Danke für die angebotene Unterstützung. Die Übertragung ist 40 Bit, wobei das oberste Byte in meiner Anwendung nicht verändert werden muß (Phase und X6).


    Ich habs mit dem BASCOM und auch mit Assembler probiert, aber irgendwie kriege ich vor lauter Blödheit das Timing für die serielle Übertragung nicht auf die Reihe. Bin schon direkt am Verzweifeln. Funktionieren tut die Elektronik mit dem DDS, denn vom PC aus läßt sich der DDS einwandfrei seriell steuern.


    Am liebsten wären mir ein paar Zeilen Assembler Fragment, eventuell Subroutinen, in dem der Takt, das 40 Bit-Frequenzwort und die Übernahme dargestellt ist. Ich mache da beim Timing einen Fehler und hab jetzt wahrscheinlich ein gewaltig dickes Brett vorm Kopf.


    73 de Rolf
    DL6MBI

  • Hallo Rolf,


    ich denke, ich hatte die gleichen Startschwierigkeiten. Mein Fehler war,
    dass ich mich mit dem MSB first versehen hatte. Ich hatte zwar stets
    das MSB zuerst geschickt, aber immer vom 1. Byte und nicht vom 4.
    Byte des Frequency Tuning Word. Prüfe dies einmal, auch das größer
    wertige Byte zuerst, nicht nur das Bit.


    Anbei zwei files in Assembler und eins das in etwa das Gleiche macht
    in C. In C wird Du einige Zeit brauchen, um die Stelle zu finden, in der
    das serielle Telegramm zum DDS geschickt wird. In C isd dies ein Dreizeiler.
    Es geht über die SPI und das Register "SPDR"


    Gruß


    Clemens

  • Hallo,
    hier ein Beispiel mit AD9834.Die serielle Kommunikation wird nur mit 3 Zeilen erledigt.Das ist ein 28Bit Word das auf zwei 16 Bit Words geteilt wird. Mit 40Bit geht es genauso, man muss sie entsprechend aufteilen und dann nacheinander zur DDS senden


    'DDS AD9834
    '
    $regfile = "m8def.dat" 'Chip ATMega8
    $crystal = 7372800 'Taktfrequenz (Hz)
    $hwstack = 32 'Hardware Stack
    $swstack = 8 'Software Stack
    $framesize = 20 'Framsize
    '
    Dim Send As Word '16Bit Variable die zum DDS gesendet wird
    '
    '
    Fsync Alias Portb.2 'AD9835 FSYNC Ausgang(16)
    Sdata Alias Portb.4 'AD9835 SDATA Ausgang(18)
    Sclk Alias Portb.5 'AD9835 SCLK Ausgang(19)
    '
    '
    'Initialisierung Ports
    Ddrb = &B11111111 'Port B, 1=Ausgang
    '
    'Initialisierung AD9834 mit 7,030MHz als Startwert
    '
    Send = &B0010000000000000 'Control word
    Gosub Ser_output
    Send = &B0110010111001001 'LSB 14Bits in freq1 10010111001001
    Gosub Ser_output
    Send = &B0100100011111111 'MSB 14Bits in freq1 00100011111111
    Gosub Ser_output
    '
    Do
    Loop
    '
    'Serielle Schnittstelle zum AD9834
    '
    Ser_output:
    Reset Fsync 'AD9834 bereit
    Shiftout Sdata , Sclk , Send , 0 '16Bit senden, MSB zuerst, Takt fallende Flanke
    Set Fsync 'AD9834 fertig
    Return
    '
    '--end source code-------------------------

    73 de DL7AK
    Arthur
    ----------------------------
    BCR, ZM4

    3 Mal editiert, zuletzt von DL7AK ()

  • Hallo.


    @Arthur.


    Vielen Dank für die Hilfe. Dein Beispiel hat mir geholfen und mir, wie auch die Mail von Clemens, meinen Fehler klar gemacht.



    @Clemens.


    Vielen Dank für die wirklich sehr hilfreiche Mail und den Assembler Code. Ich weiß jetzt, wo der Fehler war und Du hattest völlig richtig vermutet. Ich habe den gleichen Fehler gemacht - falsch rum gesendet... und wahrscheinlich auch zu schnell, denn ich hatte keine "Bremse" drin. Erst habe ich gestutzt, aber dann wars klar. Ich werde das am Wochenende gleich ausprobieren.


    Vielen herzlichen Dank für die Unterstützung! Das war jetzt wirklich eine super Hilfe.


    73 de Rolf
    DL6MBI

    Einmal editiert, zuletzt von DL6MBI ()

  • Hallo,


    ich möchte noch eine Frage anschliessen.
    Den AD9834 bekomme ich noch nicht zum Laufen.


    Die Ausgangsspannung an iout/iouta ist nur ca. 60mV pp.
    Frequenzeinstellung scheint zu funktionieren, die Frequenz aendert sich.
    Auch das Reset-Bit und Sleep1-Bit scheinen zu funktionieren, weil die Ausgänge auf DC Mittelpegel gehen.


    Ich programmiere direkt über SPI.


    AVDD, DVDD sind 5V. An CAP/2.5V liegen 2.4V.
    FS- Adjust reagiert nicht, am pin liegen 0.2V.


    Mode und Sleep12 haben keine Funktion.
    Ich bin nicht sicher, ob in meiner Software alles richtig ist.
    Ich würde aber erwarten, dass nach Reset ein Mittelpegel von 3.0mA X 200 Ohm/2 an beiden Iout's ansteht.
    Was meinen die Fachleute ? Was messt Ihr an FS-Adjust ?


    73, Dieter

  • Hallo,


    Zitat

    Ich würde aber erwarten, dass nach Reset ein Mittelpegel von 3.0mA X 200 Ohm/2 an beiden Iout's ansteht.


    Da der DAC (Stromquelle) nach einem Reset nichts zu wandeln hat, wird auch kein Strom in den 200 Ohm Lastwiderstand eingeprägt. Deshalb steht ja auch nichts an am Iout.
    Anders sieht es aus wenn der DAC im Differentialbetrieb läuft, dann wird nach einem Reset in den einen Lastwiderstand Imax eingeprägt und in den anderen Imin.


    Zitat

    Die Ausgangsspannung an iout/iouta ist nur ca. 60mV pp.


    Nur eine Vermutung.
    Hast Du da vielleicht den 10:1 Tastkopf nicht berücksichtigt?
    3,0mA x 200Ohm / 10 = 60mV


    Falls ich falsch liege bitte um Berechtigung!

    73 de DL7AK
    Arthur
    ----------------------------
    BCR, ZM4

  • Danke Arthur,
    leider nein, der 10:1 Teiler wird in der Anzeige schon berücksichtigt.


    ''RESET... corresponds to an analog output of midscale." So würde ich 0.3V an 200 Ohms erwarten und nicht 15mV.
    Vielleicht sollte ich mal einen manuellen Reset über den Resetpin versuchen.


    Grüsse, Dieter

  • Hallo Arthur,


    Der Pin-Reset funktioniert, wenn man alles richtig programmiert(!), geht auch Mode und Sleep.
    Ich bin nicht sicher, ob in meiner Software mit den multi-word transfer alles richtig ist.


    Gibt der AD9834 die richtige Amplitude erst aus, wenn alle Register initialisiert sind ?
    Ich bete, dass der Chip noch OK ist.
    Das Aus- und Einlöten vom TSSOP 0.5mm ist eine Quälerei...
    Was misst Du an FS-Adjust ?


    73 - Dieter

  • Hallo Dieter,


    ich kann am AD9834 erst Morgen messen, da mein Versuchsboard im QRL liegt.
    Melde mich Morgen mit den Messergebnissen.

    73 de DL7AK
    Arthur
    ----------------------------
    BCR, ZM4

  • Hallo Arthur,



    der größte Fehler in der Technik ist der Mensch.



    Danke für Deine Hilfe, es war zum Verzweifeln.
    Der Chip hat einen clock zu wenig verstanden.
    Damit waren alle bits im control register - auch das Sleep Bit - welches den DAC abschaltet - um eine Position versetzt.
    Warum ?
    Im Gegensatz zu anderen SPI- Chips muss VOR dem Chip Select der Clock auf High.


    73, Dieter