Forum: Mikrocontroller und Digitale Elektronik ASM von MiniDDS in WinAVR kompilieren. Wie?


von Pete (Gast)


Lesenswert?

hallo!
ich möchte das minidds nachbauen:
http://www.myplace.nu/avr/minidds/index.htm

jedoch mit einem attiny2313.
die .asm datei und winavr habe ich runtergeladen. in der .asm datei habe 
ich
#include <io2313.h>
gegen
#include <iotn2313.h>
ausgetauscht.

wie kann ich nun mit mfile diese .asm datei kompilieren, sodass ich eine 
.hex datei erhalte?

in mfile auf "makefile"/"assembler source file" klicken!? gefolgt von!?

von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Pete,

ich habs mal für AVR Studio umgebaut. Natürlich ohne Garantie.

...
hp-freund

von Pete (Gast)


Lesenswert?

hallo hp-freund!

habe eben versucht deine .hex-datei in den attiny2313 zu flashen. 
bekomme dabei eine fehlermeldung. flashe ich ein x-beliebiges led 
blinkprogramm gibt es keine probleme.

von hp-freund (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Pete,
ich bin mit Linux im Netz, liegt vielleicht am Zeilenende.
Versuch mal diese.
An sonsten: Wie lautet die Fehlermeldung?

von Pete (Gast)


Lesenswert?

hallo hp-freund!

habs eben selber kompiliert. danke für deine umänderung im code!
flashen ging jetzt.

habe noch fragen, da die anwendung nicht funktioniert:
sollen bei den fuses des attiny2313 CKDIV8 (Divide clock by 8) 
deaktiviert oder aktiviert sein? habs mal rausgenommen und auf externen 
crystal eingestellt.

mit welcher baudrate komuniziert der attiny2313 in diesem fall mit dem 
pc? habe 19200 baud eingestellt (am pc).

in der ddscontrol habe ich in den preferences bei synthesizer freq. 
1.10592e+007 eingetragen.

ich drücke auf set und nichts tut sich.

mal wieder total ratlos und es ist wieder viel zu spät

von Pete (Gast)


Angehängte Dateien:

Lesenswert?

also mit nichts tut sich meine ich:
das programm lässt sich zwar ansprechen aber die angezeigte frequenz IM 
PROGRAMM weicht etwas ab.

am ausgangspin erhalte ich keine pegeländerungen (habe einen 
frequenzmesser angeschlossen von meinem multimeter).

anschluss gemäß originalplan.

von Karl H. (kbuchegg)


Lesenswert?

Pete schrieb:
> also mit nichts tut sich meine ich:
> das programm lässt sich zwar ansprechen aber die angezeigte frequenz IM
> PROGRAMM weicht etwas ab.

Das dürfte normal sein und ist prinzipbedingt.
Der DDS kann nicht jede beliebige Frequenz erzeugen, sondern ist an ein 
Raster gebunden.

> am ausgangspin erhalte ich keine pegeländerungen (habe einen
> frequenzmesser angeschlossen von meinem multimeter).
> in der ddscontrol habe ich in den preferences bei synthesizer freq.
> 1.10592e+007 eingetragen.

Schreib da mal 11059200 rein.
Bei so einem klassischen Integer Wert wie einer Taktfrequenz würde ich 
mich nicht drauf verlassen, dass hier wissenschaftliche 
Exponentialschreibweise verstanden wird.

von Karl H. (kbuchegg)


Lesenswert?

Pete schrieb:

> mit welcher baudrate komuniziert der attiny2313 in diesem fall mit dem
> pc? habe 19200 baud eingestellt (am pc).

Aus dem Programm
1
    ldi    r16,0x05    ; set uart speed to 115.2 kbps

von Pete (Gast)


Angehängte Dateien:

Lesenswert?

hallo karl heinz! :)

habe den comport auf 115.2 abgeändert.

in der ddscontrol war unter voreinstellung 2.4e+007 eingetragen. 
anscheinend versteht es erstaunlicherweise wissenschaftliche 
exponentialschreibweise.

den wert 1.10592e+007 habe ich von hier:
Beitrag "Falsche Frequenz mit Jespers MiniDDS ?"

ändere ich diesen auf 1.10592e+006 komme ich dem eingestellten wert 
etwas näher. jedoch immer noch entfernt von der angabe auf der webseite.

achso: trotz comportanpassung immer noch keine ausgabe auf dem 
output-pin :(

von Pete (Gast)


Angehängte Dateien:

Lesenswert?

hier mal die platine. verwende kein widerstandsnetzwerk.

von hp-freund (Gast)


Lesenswert?

Pete schrieb:
> verwende kein widerstandsnetzwerk.

Das solltest Du aber! Schau dir mal den Aufbau eines R2R Netzwerks an...

von Simon K. (simon) Benutzerseite


Lesenswert?

Man muss natürlich kein Widerstandsnetzwerk verwenden. Aber das, was du 
da gebaut hast ist irgendwie kein R2R DAC.

von Karl H. (kbuchegg)


Lesenswert?

Pete schrieb:

> habe den comport auf 115.2 abgeändert.
>
> in der ddscontrol war unter voreinstellung 2.4e+007 eingetragen.
> anscheinend versteht es erstaunlicherweise wissenschaftliche
> exponentialschreibweise.

In der Tat erstaunlich.
Aber ok, wenn das Programm da offenbar einen Gleitkommawert benutzt, 
dann wird das schon gehen.
Trotzdem ist man mit der nicht wissenschaftlichen Schreibweise auf jeden 
Fall auf der sicheren Seite. Und kürzer ist sie ausserdem :-)

> den wert 1.10592e+007 habe ich von hier:
> Beitrag "Falsche Frequenz mit Jespers MiniDDS ?"

Der Wert hängt davon ab, was du als Schwingkreis verbaut hast, und nicht 
davon was auf irgendwelchen Webseiten steht.

> ändere ich diesen auf 1.10592e+006 komme ich dem eingestellten wert
> etwas näher.

Du probierst rum.
Und das ist schlecht.

Im Zweifelsfall müsste man nachrechnen (und sich die Programme ansehen) 
was da wirklich rauskommen muss. Kann ja auch ein Fehler auf der Website 
sein.

> achso: trotz comportanpassung immer noch keine ausgabe auf dem
> output-pin :(

Ich vermisse auf deiner Platine zuallererst mal das ganze Drumherum, das 
zum Ansprechen einer RS232 gebraucht wird. Das dein µC den PC nicht 
versteht wundert mich überhaupt nicht.

von Pete (Gast)


Angehängte Dateien:

Lesenswert?

hallo!

also die rs232 kommunikation erfolgt über einen max232. dieser ist auf 
einem separaten board. verbinde also einfach txd/rxd/gnd und gut ist. 
mache dies bei so ziemlich allen projekten. wobei dies das erste 
wirklich widerspenstige ist :)

ich verwende den ganz normalen 11.0592 MHz quarz (wie gesagt 
clockdivide/8 wurde abgeschaltet).

zum thema widerstandnetzwerk. links das original. rechts der nachbau mit 
einzelnen. von daher passt das schon wie im original.

von hp-freund (Gast)


Lesenswert?

Falsch! Die Gnubbels zwischen den R sind auch R.

von hp-freund (Gast)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Pete schrieb:

> zum thema widerstandnetzwerk. links das original. rechts der nachbau mit
> einzelnen. von daher passt das schon wie im original.

Dann google mal nach R2R Netzwerk.
Hinweis: Der seltsame Name hat schon seinen Grund.

von Simon K. (simon) Benutzerseite


Lesenswert?

Es scheint mir allgemein so, als hättest du das Original sehr weit 
"abgespeckt" ;-)

von Pete (Gast)


Angehängte Dateien:

Lesenswert?

oh mann ich bekomme gleich nen austicker -.-

habe das so nachgebaut, da ich mir ein widerstandnetzwerk in eagle 
angeschaut habe. es ist aber kein r"2R". schande! konnte mir die kleinen 
knubbel da nämlich nicht erklären.

soll heissen, das sind nochmal 7x 10K widerstände? ähnlich wie auf der 
neuen zeichnung?

simon, mit dem abgespeckt hast du vollkommen recht ;)

eigentlich ist das r2r-netzwerk nur dafür zuständig 256 verschiedene 
spannungen auszugeben. von mir nicht benötigt. könnte es trotzdem daran 
liegen, daß ich keine ausgabe auf dem output-pin habe?

von Spess53 (Gast)


Lesenswert?

Hi

>eigentlich ist das r2r-netzwerk nur dafür zuständig 256 verschiedene
>spannungen auszugeben. von mir nicht benötigt.

Und wie willst du dann die Kurven erzeugen? Mir scheint, du hast von 
dem, was du machen willst, nicht viel verstanden.

MfG Spess

von Pete (Gast)


Lesenswert?

hallo spess!

da hast du vollkommen recht. dafür lerne ich gerade wieder immens.

von Karl H. (kbuchegg)


Lesenswert?

Pete schrieb:


> soll heissen, das sind nochmal 7x 10K widerstände? ähnlich wie auf der
> neuen zeichnung?


Das Ding heißt   R 2R  Netzwerk!

Schau noch einmal genau! Die einen Widerstände haben den doppelten Wert 
der anderen. Daher das 2R im Namen!

> spannungen auszugeben. von mir nicht benötigt. könnte es trotzdem daran
> liegen, daß ich keine ausgabe auf dem output-pin habe?

Ausgabe wirst du schon haben. Nur ist bei dir ziemlich sicher immer 
irgendein Pin der 8 auf high. Nach den Widerständen hast du daher 
praktisch immer eine 1 (also 5V)

von Simon K. (simon) Benutzerseite


Lesenswert?

Wenn du genügend Platz hast, kannst du die "2R" durch zwei in Reihe 
geschaltete 10K(20K) Widerstände machen und die "R" durch einen 10K 
Widerstand machen.

ODER: Die "2R" durch einen 10K Widerstand und die "R" durch zwei 
parallelgeschaltete 10K (=5K) Widerstände.

Dadurch kriegst du die beste Genauigkeit hin. In den E-Reihen der 
Widerstände gibts AFAIK keine R-2R Paare.

von Pete (Gast)


Angehängte Dateien:

Lesenswert?

> Ausgabe wirst du schon haben. Nur ist bei dir ziemlich sicher immer
> irgendein Pin der 8 auf high. Nach den Widerständen hast du daher
> praktisch immer eine 1 (also 5V)

das ist korrekt!

> Schau noch einmal genau! Die einen Widerstände haben den doppelten Wert
> der anderen. Daher das 2R im Namen!

aha! also nicht im sinne von p2p (peer 2 peer), sondern doppelter wert. 
also direkt an die controllerpins widerstände mit dem doppelten wert 
(20K) und vertikal dann die 10K's. habe den schaltplan nochmal geändert.

von Simon K. (simon) Benutzerseite


Lesenswert?

Ja, nur dass es keine 20K Widerstände gibt. Siehe meinen Post über 
deinem.

von Peter R. (pnu)


Lesenswert?

Da müssen doch zwei Funktionen getrennt werden:

Erste Funktion: Die Initialisierung nach reset stellt die Frequenz  1kHz 
ein und der DDS-Betrieb geht los.
Die Pins für das R/2R Netzwerk liefern dann die verschiedensten 
Rechteckspannungen, das R/2R-Netzwerk macht aus denen den Sinus.

Erst wenn diese Funktion richtig läuft, sollte man die zweite Funktion 
(serielle Schnittstelle) freigeben und ihre Arbeit überprüfen bzw. 
einstellen. Denn die Einstellung anderer Werte und die Verbindung zum PC 
hat dann erst einen Sinn.

Dann kann  man auch mit einem angeschlossenen NF-Teil die Steuerfunktion 
akustisch kontrollieren.

nebenbei: Meines Wissens gibt es in der E24-Reihe das Wertepaar 
20kOhm/10kOhm.

von Spess53 (Gast)


Lesenswert?

Hi

>In den E-Reihen der Widerstände gibts AFAIK keine R-2R Paare.

10k/20k, 11k/22k, 15k/30k, 18k/36k .....

MfG Spess

von Simon K. (simon) Benutzerseite


Lesenswert?

Stimmt, ab E24 geht es! Danke Spess und Peter.

von Peter R. (pnu)


Lesenswert?

Hier an der Tastatur habe ich die ganzen Exx Reihen nicht direkt vor 
mir, jedenfalls sind mir 2kOhm /20 kOhm-Widerstände in r207 oder SMD 
schon öfter vorgekommen.

Gerade nachgesehen:

Wikipedia: E24-Reihe (Ätsch!!)

übrigens: die Herstellung aus Parallel- oder seriellschaltung zweier 
gleicher Werte, also 20kOhm/10kOhm oder 5kOhm/10kOhm hat den Vorteil, 
dass der Temperaturkoeffizient besser übereinstimmt, das sogenannte 
tracking besser klappt. Wenn der Platz ausreicht, sollte man also lieber 
diesen Weg einschlagen.

von Pete (Gast)


Lesenswert?

hallo!

ich habe entsprechende 20K widerstände besorgt und R2R-like eingelötet.
bei 4,98V am ersten pin erhalte ich jeweils hinter den 10K's:

4,96V
4,94V
4,89V
4,78V
4,58V
4,16V
3,327V

leider funktioniert die frequenzausgabe immer noch nicht. liegt 
vermutlich an der kompilierung per avr-studio.

jemand noch eine idee?

von Pete (Gast)


Angehängte Dateien:

Lesenswert?

ich es es erneut kompiliert und geflasht.

allerdings gibt es eine erhebliche frequenzabweichung. habe die 20K und 
10K widerstände vorher alle durchgemessen und nur die präzisesten dafür 
ausgewählt.

stelle ich in der dds-control 11059200 ein, wird der wert von der 
dds-control automatisch in 1.10592e+007 umgewandelt.

dabei gibt es eine kommaverschiebung von eingestellten 8000hz auf 888hz.

setze ich in der dds-control 1.10592e+006 ein, stimmt der hz-wert im 
terminal und auf dem multimeter im kommabereich, ist aber sowas von 
dermaßen ausserhalb des eingestellten wertes -.- statt 8000hz nämlich 
8888hz.

terminal und multimeter mit frequenzzähler wurden zur hz-messung 
herangezogen. beide zeigen die gleichen 8888er werte. es liegt also an 
der mini-dds.

von Pete (Gast)


Angehängte Dateien:

Lesenswert?

eben ausprobiert:

stelle ich 1.2288e+006 ein, erhalte 7992 hz.

der werte habe ich aus diesem post:
Beitrag "Re: Falsche Frequenz mit Jespers MiniDDS ?"

befriedigend ist das wirklich nicht!

von Pete (Gast)


Lesenswert?

huhu!?

von hp-freund (Gast)


Lesenswert?

Auch huhu ;)

Ich habe mir den DDS nachgebaut und dabei einen großen Fehler in meiner 
asm Datei von weiter oben gefunden. Jedes Z-Register Berechnung auf die 
Kurventabelle muß mal 2 genommen werden.
1
    ldi    r31,high(sine)  ; setup Z pointer hi
2
    ldi    r30,low(sine)  ; setup Z pointer lo

wird zu:
1
    ldi    r31,high(sine*2)  ; setup Z pointer hi
2
    ldi    r30,low(sine*2)  ; setup Z pointer lo

Das Gleiche auch für die anderen Kurvenformen.

Das DDS-Control Programm funktioniert bei mir nur zum Einstellen des DDS 
- das passt dann auch - , der angezeigte Wert oben ist allerdings 
falsch. Dachte erst es liegt vielleicht am USB-RS232 Wandler aber "zu 
Fuß" mit Braypp werden die richtigen Daten gesendet und auch empfangen.
Als Quarz habe ich 24MHz gewählt, hatte gerade keinen anderen für runde 
Baudrate, läuft aber auch so.

...
hp-freund

von Peter R. (pnu)


Lesenswert?

Die falsche Frequenz hat kaum etwas mit dem R-2R Netzwerk zu tun.
Der höchstwertige Ausgang des Ports wird eine Rechteckspannung der 
richtigen Frequenz ausgeben, auch wenn das Netzwerk nicht stimmt, das 
ist, zusammen mit der lookup-Tabelle für die Kurvenform verantwortlich.
Es klappt entweder mit dem Programmablauf nicht oder mit der 
Schnittstelle.

Da der Fehler 9/8,10/9 oder 11/10 beträgt, vermute ich, dass in der 
DDS-Programmschleife ein Fehler ist, der sie um einen Takt länger macht. 
Oder dass die Umrechenroutine: eingegebene Zahl --> Zahl die addiert 
wird, mit einer falschen Zahl für die Schleifentakte arbeitet.

von Pete (Gast)


Lesenswert?

huhu hp-freund  :D

ich zitiere:


"Die Anweisung .section kennt AVR Studio nicht.

Ebenso ist es nicht möglich in den Programmspeicher mit der Direktive 
.byte einzelne Bytes einzulesen. Da gehört dann .db hin.

Normalerweise muss in die Register Ladeanweisung noch ein *2 mit rein, 
da der Programmspeicher immer 2 Adressen belegt.

Ich hatte recht, man muß die Flash Adressen mit 2 multiplizieren."


http://www.rclineforum.de/forum/thread.php?threadid=249421

von hp-freund (Gast)


Lesenswert?

Hallo Pete,

läuft dein DDS jetzt?

von Pete (Gast)


Lesenswert?

hi!

hab eben den chip runtergelötet und muss diesen neu flashen. melde mich 
wenn alles erledigt wurde.

von hp-freund (Gast)


Lesenswert?

In
System
Programable

Hab mich schon gewundert wie Du das Programm immer änderst bei dem 
Platinen-Layout :)

von Karl H. (kbuchegg)


Lesenswert?

Pete schrieb:
> hi!
>
> hab eben den chip runtergelötet und muss diesen neu flashen. melde mich
> wenn alles erledigt wurde.

Du solltest über einen Sockel nachdenken.
So wie das Programm bzw. die Fehlerbeschreibungen aussehen, könnten das 
noch ein paar mehr Durchgänge werden.

von eProfi (Gast)


Lesenswert?

Karl-Heinz:
> Das dürfte normal sein und ist prinzipbedingt.
> Der DDS kann nicht jede beliebige Frequenz erzeugen,
> sondern ist an ein Raster gebunden.

Du verwunderst mich,
das Raster ist extrem fein, deutlich unter 1 Hz.


Bitte nutze die Tipps, die Dir gegeben wurden  und beantworte alle 
Fragen ausführlich, die gestellt wurden.

Nach dem Reset gibt der Chip 1kHz aus, ohne dass dafür eine Verbindung 
zum PC notwendig ist.
Das musst Du zuerst hinkriegen, sonst hast Du mehrere Baustellen und Du 
weißt nicht, wo der Hase in der Grube liegt.

Erst wenn die 1kHz sauber rauskommen, kannst Du den PC verbinden und 
andere Frequenzen versuchen.

Ein Oszi ist sehr hilfreich, um zu sehen, ob der Sinus sauber ist und ob 
das Multimeter überhaupt die richtige Frequenz anzeigt.

Um sicher zu gehen, messe mal am Pin mit dem höchsten Wert (der R, der 
am nächsten zum Ausgang sitzt. Dort steht ein Rechtecksignal an, bei dem 
es sicherer ist, dass das Multimeter darauf triggert.

Ebenfalls wichtig ist, dass die Tabellen an boundaries liegen, d.h. mit 
einer "geraden" Adresse beginnen, schau Dir das Listing an!

Weiterhin ist wichtig, dass die Hauptschleife genau so viele Cyclen 
verbraucht wie angegeben, sonst stimmt die Ausgangsfrequenz nicht.



> bekomme dabei eine fehlermeldung

> dabei gibt es eine kommaverschiebung von eingestellten 8000hz auf 888hz.

> also mit nichts tut sich meine ich:
> das programm lässt sich zwar ansprechen
> aber die angezeigte frequenz IM PROGRAMM weicht etwas ab.

Und biite gewohne Dir an, präzise Angaben zu machen. Sonst hat hier 
keiner Lust, Dir zu helfen. Erzöhle genau und ausführlich, was Du 
gemacht hast, welches Ergebnis Du erwartest und welches andere Ergebnis 
Du beobachtest.

Und Deine Tastatur hat auch zwei Shift-Tasten, die bedient werden 
wollen.
Und Kommata sind dazu da, dem Leser zu helfen, das Satzgefüge leicht zu 
erkennen. Dein Geschreibsel muss ich erst dreimal lesen, damit ich 
verstehe, was Du meinst.

Also, genug gemeckert.
Viel Erfolg!

von Pete (Gast)


Lesenswert?

ja, ein oszi wäre schön.
ja, wenn man aus dem beruflichen bereich kommen würde wäre schön.
ja, ISP wäre schön.
ja, ein sockel für SMD teile wäre auch schön.

leute mal ernsthaft:

da möchte man einfach nur seinen frequenzzähler mit der günstigsten und 
schnellstmöglich aufzubauenden DDS-variante testen und dann zieht das so 
einen ellenlangen rattenschwanz an problemen hinter sich her. hätte ich 
sowas erahnt, hätte ich wenigstens ein jumperbares ISP mit auf die 
platine geätzt.

hp-freund:
habe den controller eben geflasht, fix eingelötet, in der dds-control 
"1.2288e+006" eingetragen und BINGO... es läuft aufs hz genau.

vielen dank an alle beteiligten!

<wieder was gelernt...>

von Denis K. (denis_tbg)


Angehängte Dateien:

Lesenswert?

Moin moin...

Ich habe das Teil auch nachgebaut...
Ein paar kleine Änderungen hier und da... dann kann der auch USB... 
leider habe ich das mit dem *.asm abändern für einen ATTiny2313 nicht 
drauf. Also wenn mir jemand die Funktionierende dds.hex mailen oder hier 
posten könnte, das wäre toll.
bei Bedarf kann ich auch gerne Platinen fertigen (Fräse, als Prototyp) 
oder den Schaltplan mit Layout hochladen :-)
Ich kann bei Bedarf auch gerne Bilder von meinem Exemplar hochladen.


Gruß Denis

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
Noch kein Account? Hier anmelden.