Der AVR-/ARDUINO-Faden

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der AVR-/ARDUINO-Faden

Beitrag von Profipruckel »

Bauteiltöter hat geschrieben:Ein großer Kritikpunkt an Arduino ist ja vor allem die Performance die so viel schlechter ist ...

Einfache Aufgabe: Setze PD2 auf "high".
Ich weiß nicht, was Du uns sagen willst, aber einen Pin bekomme ich in der Arduino-IDE deutlich einfacher hoch:

Code: Alles auswählen

void setup() {
  pinMode(8, OUTPUT);  //LED
  digitalWrite(8, HIGH);
}  

void loop() {
  // Endlosschleife
  delay(500);
}
Vermutlich kann ich mir "pinMode(8, OUTPUT);" auch noch ersparen, es wird zumindest nicht angemeckert.

Was Du dabei total vergisst: Meinem Lötkolben ist es scheißegal, ob der Heizzyklus 75,000 ms oder 75037,13 µs dauert! Meinen NiCd-Akku juckt es nicht, wenn er 845 Minuten anstatt nur 14 Stunden geladen wird.

Ich bin bestimmt nicht der Einzige hier, der so denkt - es gibt genug Anwendungen, vermutlich sogar die Masse, wo es auf die µs nicht ankommt und einfach die bequeme Entwicklungsumgebung samt zugehöriger Kinderbücher in den Vordergrund rückt.
Benutzeravatar
ferdimh
Beiträge: 9430
Registriert: Fr 16. Aug 2013, 15:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von ferdimh »

Tatsächlich brauchst du MEHR Zeilen Code als in der "klassischen C-Lösung".
Der Punkt ist nicht, dass die Arduinolösung pauschal schlecht ist. Der Punkt ist, dass man die Lösung (bei gleichem Verhalten!) deutlich geschickter bauen könnte.

Das andere Problem ist, dass Menschen die Grenzen nicht sehen. Wer keinerlei technische Vorbildung hat und mit Arduino spielt, sieht die Grenzen nicht. Aber das ist die alte Leier...
Benutzeravatar
Sven
Beiträge: 4423
Registriert: Fr 28. Jun 2013, 12:52
Wohnort: Sechsundzwanzigdreisechzehn

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sven »

Also diese Diskussion ist ausgezeichnet dafür geeignet, Anfänger abzuschrecken...
Kainit
Beiträge: 156
Registriert: So 11. Aug 2013, 16:05
Wohnort: Thüringen

Re: Der AVR-/ARDUINO-Faden

Beitrag von Kainit »

Sven hat geschrieben:Also diese Diskussion ist ausgezeichnet dafür geeignet, Anfänger abzuschrecken...
Als einer dieser Anfänger bestätige ich das mal...

mfg
Benutzeravatar
Sven
Beiträge: 4423
Registriert: Fr 28. Jun 2013, 12:52
Wohnort: Sechsundzwanzigdreisechzehn

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sven »

und genau deswegen wird diese Diskussion bitte woanders fortgeführt, sofern sie denn irgendein Ergebnis hervorbringt, z.B. einen effektiveren Arduino ;)
Ansonsten ist das nämlich allenfalls nur Anfänger abschreckendes Geschwafel.

Liebe Anfänger, die Diskussion aus den vorherigen Beiträgen ist für euch absolut irrelevant. (Ich gehe mal davon aus, dass keiner mit einem Anfängerprojekt auch nur ansatzweise in Regionen vorstößt, wo die Zugriffszeit und die Komplexität des generierten Codes kritisch werden. Da gibt es ganz andere Baustellen zwischen den Ohren, die mehr Zuwendung brauchen.)
Benutzeravatar
Bauteiltöter
Beiträge: 254
Registriert: So 11. Aug 2013, 17:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Bauteiltöter »

margau hat geschrieben:Was ich zuerst zu sagen habe: So wie ich das sehe initialisiert der Arduino, bevor er in die Hauptschleife geht, auch noch diverse Timer die er für Dinge wie Delay oder millis() braucht. Das machst man beim reinen C natürlich nicht.

Desweiteren ist der Arduino darauf ausgelegt, mit Programmiertechnisch nicht ganz so begabten Leuten zu funktionieren. Jetzt erklär du denen mal, welchen Port sie wann setzten müssen, wo im 150-seitigen Datenblatt das steht.
Nein,wie Martin schon sagte, von der Arduino-typischen Initalisierung ist nix dabei, der Code den ich rausseziert habe wird bei jedem Aufruf von digitalWrite() ausgeführt.
Wo steht wie man die Ports beschaltet? Datenblatt, Kapitel "I/O Ports". Oder, in mundgerechte Happen zerlegt, im Anfänger-Tutorial
Profipruckel hat geschrieben:
Bauteiltöter hat geschrieben:Ein großer Kritikpunkt an Arduino ist ja vor allem die Performance die so viel schlechter ist ...

Einfache Aufgabe: Setze PD2 auf "high".
Ich weiß nicht, was Du uns sagen willst, aber einen Pin bekomme ich in der Arduino-IDE deutlich einfacher hoch:

Code: Alles auswählen

void setup() {
  pinMode(8, OUTPUT);  //LED
  digitalWrite(8, HIGH);
}  

void loop() {
  // Endlosschleife
  delay(500);
}
Vermutlich kann ich mir "pinMode(8, OUTPUT);" auch noch ersparen, es wird zumindest nicht angemeckert.
Es ging mir darum herauszufinden was der Aufruf von digitalWrite() im Hintergrund bewirkt.
Und nein, pinMode() kannst du nicht weglassen... das ist vermutlich der einzige Punkt an dem die Arduino-IDE noch selber denken von dir verlangt, soll der Port Ein- oder Ausgang sein? :roll:
Der Compiler kann dich auch nicht vor allem retten, er warnt nur, wenn C-Regeln verletzt werden oder er C-Code sieht, der erfahrungsgemäß zwar legal ist, aber eigentlich nicht gewollt ist. (Klassiker wie if(a=true) oder if(bedinung);)
ferdimh hat geschrieben:Tatsächlich brauchst du MEHR Zeilen Code als in der "klassischen C-Lösung".
Der Punkt ist nicht, dass die Arduinolösung pauschal schlecht ist. Der Punkt ist, dass man die Lösung (bei gleichem Verhalten!) deutlich geschickter bauen könnte.

Das andere Problem ist, dass Menschen die Grenzen nicht sehen. Wer keinerlei technische Vorbildung hat und mit Arduino spielt, sieht die Grenzen nicht. Aber das ist die alte Leier...
Danke, das wollte ich mal aufzeigen. Mir ging es auch nicht darum, Arduino per se schlecht zu machen. Es heißt nur immer, "Arduino ist so langsam" und ich wollte das ganze mal mit Fakten untermauern.

Und um zu zeigen wie es effizient geht habe ichmal ein paar Makros gebastelt die sich genau so benutzen lassen wie digitalWrite()

Code: Alles auswählen

#include <avr/io.h>
/* spezialdefinitionen hier*/
#define LED B,1

void f1(void)
{
	digitalWrite(LED,HIGH);
}
Als Makro ausgeführt wird das ganze zu ganzen 3 ASM-Befehlen (+Funktionsrücksprung):

Code: Alles auswählen

f1:
	sbi 37-32,1
	in r24,37-32
	out 37-32,r24
	ret
Zwei der drei Befehle sind immernoch unnützer overhead (in/out), lassen sich aber bei weitem nicht so einfach vermeiden ohne an Komfort zu verlieren.
für ein digitalWrite(LED,LOW); compiliert es natürlich äquivalent in cbi...

Dazu habe ich noch passende Makros SET_OUTPUT, SET_INPUT, SET_PORT und RESET_PORT geschrieben die alle mit der Definition von LED funktionieren.
Die Verbindung zwischen Arduino-Nummern und Port-Pin-Konfiguration könnte man auch noch über ein paar Definitionen machen, z.B.
#define ARDU0 B,0
#define ARDU1 B,1
u.s.w.

Ein digitalRead() könnte man sicher auch recht einfach als Makro implementieren, das ganze hat mich jetzt vielleicht mit Beitrag schreiben 30min gekostet.
Das einzige, was meine Version anders macht: Sie überprüft nicht, ob der Benutzer den Pin vorher mit einem TImer verbunden hat (PWM-Out), das ist meiner Meinung nach aber auch... eher Überflüssig. Entweder PWM oder digitaler I/O, wenn man beides gleichzeitig an macht... nun, dann funktioniert es eben nicht richtig.

Hier der ganze Makro-Code:

Code: Alles auswählen

#include <avr/io.h>

#define digitalWritex(port, bit, state) do{PORT##port|=(state<<bit);PORT##port&=~(!state<<bit);}while(0);
#define digitalWrite(x, y) digitalWritex(x,y)

#define SET_PORTx(port, bit) 	do{PORT##port|=(1<<bit);}while(0)
#define SET_PORT(x)  SET_PORTx(x)

#define RESET_PORTx(port, bit) 	do{PORT##port&=~(1<<bit);}while(0)
#define RESET_PORT(x)  RESET_PORTx(x)

#define SET_OUTPUTx(port, bit) do{DDR##port|=(1<<bit);}while(0)
#define SET_OUTPUT(x) SET_OUTPUTx(x)

#define SET_INPUTx(port, bit) do{DDR##port&=~(1<<bit);}while(0)
#define SET_INPUT(x) SET_INPUTx(x)

#define HIGH 1
#define LOW 0

#define LED B,1

void f1(void)
{
	digitalWrite(LED,HIGH);
}
Nicht von der komischen Makro-Syntax verschrecken lassen, davon würde man ja nichts sehen wenn man es in eine header-Datei auslagert und einfach nur benutzt. SO könnte es gehen bei gleichem Konfort und mit 25x weniger Code (zur Laufzeit).

Ich poste das hier weil ich mich direkt auf Antworten beziehe und das auch mein letzter Beitrag zu dem Thema wird (es sei denn, es kommen Rückfragen).
Benutzeravatar
Harley
Beiträge: 1161
Registriert: So 11. Aug 2013, 21:16
Wohnort: Regensburg

Re: Der AVR-/ARDUINO-Faden

Beitrag von Harley »

Hi,
an alle Anfänger:

Lasst euch nicht bange machen! Fürs Erste reicht, denke ich dieses Heft (6,99€):

Bild->zoom

Es ist völlig ausreichend, nur das Heft zu kaufen, die Hardware bekommt man beim China-Mann billiger!

z.b. http://www.ebay.de/itm/Mega-2560-R3-REV ... SwoudW2Xmu

Ich habe mir das Board auch gekauft, es funktioniert einwandfrei, ich verwende es für alle Versuche...
Das Ding lohnt sich, weil man erstens jede Menge Speicherplatz hat, ausserdem hat das Teil 4 echte serielle Schnittstellen.
Da ist die serielle nicht mit dem Programmierport belegt, d.h. man kann Debug-Ausgaben über USB direkt in der Programmierumgebung machen und trotzdem die serielle Schnittstelle testen.

z.B. damit:

http://www.ebay.de/itm/New-2-4-Nextion- ... SwnipWVur0

Ich denke, damit gehts mit dem Einstieg ganz schnell!!

Gruß, Harley

EDIT: ganz vergessen: dafür gibts natürlich schon eine LIB: https://github.com/itead/ITEADLIB_Arduino_Nextion
Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der AVR-/ARDUINO-Faden

Beitrag von Profipruckel »

Profipruckel hat geschrieben:Ich weiß nicht, was Du uns sagen willst, aber einen Pin bekomme ich in der Arduino-IDE deutlich einfacher hoch:

Code: Alles auswählen

void setup() {
  pinMode(8, OUTPUT);  //LED
  digitalWrite(8, HIGH);
}  

void loop() {
  // Endlosschleife
  delay(500);
}
Vermutlich kann ich mir "pinMode(8, OUTPUT);" auch noch ersparen, es wird zumindest nicht angemeckert.
Bauteiltöter hat geschrieben:Und nein, pinMode() kannst du nicht weglassen... das ist vermutlich der einzige Punkt an dem die Arduino-IDE noch selber denken von dir verlangt, soll der Port Ein- oder Ausgang sein? :roll:
Der Compiler kann dich auch nicht vor allem retten, er warnt nur, wenn C-Regeln verletzt werden oder er C-Code sieht, der erfahrungsgemäß zwar legal ist, aber eigentlich nicht gewollt ist. (Klassiker wie if(a=true) oder if(bedinung);)
Generell ist es eine gute Idee, alle Ein- und Ausgänge zu definieren und mit Namen zu versehen, ich mache das so.

Ich habe gelesen: Das Arduino-Kochbuch von O'Reilly sagt, dass beim Arduino erstmal alle Pins Eingänge sind und verzichtet in Programmbeispielen darauf, Inputs zu definieren. Schreibt man auf einen Input "HIGH", wird damit der interne Pullup-Widerstand aktiviert - eine nette Falle für den Bastler.

Damit ist klar, weshalb die IDE das nicht anmeckert.

Wenn Du sagst "noch selber denken von dir verlangt", na ja, oft genug muß ich mir denken, was so manche Fehlermeldungen mir wirklich sagen wollen :-)
Benutzeravatar
Hightech
Beiträge: 11496
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Ich bin eigentlich gegen die Adruiono Boards, da ist zu viel Geraffel drauf was man nicht braucht, schon gar nicht am Anfang wenn man was lernen möchte.
Da empfehle ich dringend, sich einen ATMEGA88 auf ein Steckbrett zu stecken und da dann einen ISP-Adapter mit drauf zu häkeln.
5V drauf und fertig.

Den RS232-ISP Adapter frickelt man sich schnell zusammen:
https://www.mikrocontroller.net/article ... rcon2m.png
Dann kann man mit Ponyprog den AVR programmieren, Ponyprog macht auch die Fuses.
https://www.mikrocontroller.net/article ... seriell.3F

Entweder macht man es mit Microsoft, dazu braucht man WINAVR
https://www.mikrocontroller.net/article ... mit_AVRISP
Das Studio braucht man NICHT.

Man will ja eigentlich nur eine programm.c schreiben und die dann zu einer hex Datei umwandeln.

Oder unter Linux braucht man
avr-gcc 4.3.3

Hier mal einlesen:
https://www.mikrocontroller.net/article ... C-Tutorial
Da sind auch die grundsätzlichen C Sachen drinnen.

AVR-LibC 1.6.7
avr-binutils
avrdude
Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der AVR-/ARDUINO-Faden

Beitrag von Profipruckel »

Harley hat geschrieben:Hi, an alle Anfänger:
Lasst euch nicht bange machen! Fürs Erste reicht, denke ich dieses Heft (6,99€):

[Bild c't Make]

Es ist völlig ausreichend, nur das Heft zu kaufen, die Hardware bekommt man beim China-Mann billiger!
Wäre das Heft Anfang 2015 erschienen, hätte ich es vermutlich gekauft. Jetzt brauche ich es nicht mehr, habe zwei China-UNOs beim Ali geordert und ein paar Schulscripte aus dem Inernet abgearbeitet. Etwas Sucherei fördert auch richtige Bücher als .pdf zu Tage.

Für wirkliche Anfänger finde ich das Heft einschließlich einem originalen Uno für 24,95 € incl. Versandkosten als im Preis durchaus angemessen. Wenn es dann wirklich der Uno mit dem grossen DIL-IC ist, wie abgebildet, sowieso. Quer über diverse Foren scheitern etliche Leute am USB-Treiber für die Chinesenboards, Schaltbilder der Chinesen habe ich bislang auch nicht aufgetrieben.

Ich sehe den Uno eh nur zum Üben, für reale Projekte ist der mir mechanisch viel zu groß.
Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der AVR-/ARDUINO-Faden

Beitrag von Profipruckel »

Hightech hat geschrieben:Ich bin eigentlich gegen die Adruiono Boards, da ist zu viel Geraffel drauf was man nicht braucht, schon gar nicht am Anfang wenn man was lernen möchte.
Protest - Ich lerne nicht um des Lernes willen, ich habe eine Anwendung und will die zügig lösen.

Uno aus der Tüte ziehen, 5 LEDs dranlöten. Die IDE auf dem PC auspacken, den USB-Treiber suchen ... nach insgesamt 2 Stunden hatte ich ein Lauflicht, ohne zuvor jemals einen ATMega angefasst zu haben.
Da empfehle ich dringend, sich einen ATMEGA88 auf ein Steckbrett zu stecken und da dann einen ISP-Adapter mit drauf zu häkeln.
Bei Preisen um 2 €uro für einen kompletten Chinuino vergeht mir die Lust, Quarz und Kleinkram ans blanke IC zu löten! Solange Strom aus der Steckdose kommt, kann ich mir auch die 35 mA Stromaufnahme des kompletten nano leisten. Gegenwärtig könnte mich nur der Wunsch nach Batteriebetrieb zum blanken Controller-IC treiben, was dann aber auch einen tieferen Einstieg in dessen Programmierung nach sich ziehen würde.

Einen USB-ISP-Adapter habe ich beim ALI gekauft, mit U$D 4,95 schon fast das Luxusmodell. Spielt einwandfrei, ich habe aber ziemlich lange gesucht, welcher Windows-Treiber zu dem Ding passt und wie der Anschluß belegt ist - Dokumentation kennen die Chinesen nicht.
Benutzeravatar
Daniel
Beiträge: 859
Registriert: Mi 14. Aug 2013, 21:43
Wohnort: NRW

Re: Der AVR-/ARDUINO-Faden

Beitrag von Daniel »

Hallo,
inzwischen habe ich ein LCD Keyoad Shield erworworben und nun folgende Fragen:

Ich habe es auf den Mega 2560 gesteckt und einen Sketch kopiert und damit versucht einen Test zu starten.
Fehlanzeige, wer kann mir einen passenden Sketch dafür empfehlen.
Dann geht das Display nach dem Einstecken nach gut 5 Sekunden aus, normal???

Danke und ich glaube doch zu alt zu sein für diese Teile. :D :D :D
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der AVR-/ARDUINO-Faden

Beitrag von Heaterman »

Hast Du die zum LCD-Shield passende Lib eingebunden?
Benutzeravatar
Daniel
Beiträge: 859
Registriert: Mi 14. Aug 2013, 21:43
Wohnort: NRW

Re: Der AVR-/ARDUINO-Faden

Beitrag von Daniel »

Heaterman hat geschrieben:Hast Du die zum LCD-Shield passende Lib eingebunden?
Nein, wo finde ich diese?

Danke
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der AVR-/ARDUINO-Faden

Beitrag von Heaterman »

Da müsste man wissen, wie das Shield heißt und wo es her ist.

ich hab allein drei verschiedene Display-Shields hier im Einsatz.
Benutzeravatar
Daniel
Beiträge: 859
Registriert: Mi 14. Aug 2013, 21:43
Wohnort: NRW

Re: Der AVR-/ARDUINO-Faden

Beitrag von Daniel »

Heaterman hat geschrieben:Da müsste man wissen, wie das Shield heißt und wo es her ist.

ich hab allein drei verschiedene Display-Shields hier im Einsatz.
Dieses Teil aus Asien...!!!
1602 LCD Board Keypad Shield Blue Backlight For Arduino with UART Interface
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der AVR-/ARDUINO-Faden

Beitrag von Heaterman »

Das hier?

Bild


Das ist ein normales LC-Display mit 4-Bit-Ansteuerung. Da lädst Du Dir in der IDE unter „Sketch” und „Bibliothek einbinden” die Lib „LiquidCrystal”

Das sieht dann am Programmanfang so aus:

#include <LiquidCrystal.h>

Hier ein Tutorial für die Ansteuerung:

http://funduino.de/index.php/3-programm ... cd-display
Benutzeravatar
BMS
Beiträge: 220
Registriert: Di 13. Aug 2013, 10:56

Re: Der AVR-/ARDUINO-Faden

Beitrag von BMS »

Dann geht das Display nach dem Einstecken nach gut 5 Sekunden aus, normal???
Die Displaybeleuchtung kann einige zig mA ziehen, und der kleine Spannungsregler auf dem Board ist ganz schnell an seiner thermischen Grenze.
Kühlkörper ist vom Entwickler ja keiner eingeplant worden. Bei 12V am Eingang (bei geringerer Eingangsspannung sieht es besser aus) ist der Regler bei etwa 130mA an der thermischen Grenze. Diese Diskussion hatten wir schon vor kurzem:
http://www.fingers-welt.de/phpBB/viewto ... =14&t=5840

Grüße, Bernhard
Benutzeravatar
Daniel
Beiträge: 859
Registriert: Mi 14. Aug 2013, 21:43
Wohnort: NRW

Re: Der AVR-/ARDUINO-Faden

Beitrag von Daniel »

Heaterman hat geschrieben:Das hier?

Bild


Das ist ein normales LC-Display mit 4-Bit-Ansteuerung. Da lädst Du Dir in der IDE unter „Sketch” und „Bibliothek einbinden” die Lib „LiquidCrystal”

Das sieht dann am Programmanfang so aus:

#include <LiquidCrystal.h>

Hier ein Tutorial für die Ansteuerung:

http://funduino.de/index.php/3-programm ... cd-display
Das in 13 beschriebene Display läuft doch bei mir schon lange.
Es geht um das Keypadshield!!!
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der AVR-/ARDUINO-Faden

Beitrag von Heaterman »

Seh gerade, das Bild wurde nicht gezeigt.

Also das hier?

http://www.sainsmart.com/sainsmart-1602 ... a1280.html

Da ist auch ein Codebeispiel zu finden.

Wenn ich die Beschriftung richtig entziffere, ist das Display ganz normal im 4-Bit-Modus angeschlossen.
Benutzeravatar
Hightech
Beiträge: 11496
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Profipruckel hat geschrieben:Bei Preisen um 2 €uro für einen kompletten Chinuino vergeht mir die Lust, Quarz und Kleinkram ans blanke IC zu löten!
Man braucht 5V und einen AtMega oder Tiny. sonst nix. Keinen Quarz oder so, wofür auch.
Nur den Progammierer, und den kann man sich aus der Restekiste zusammenlöten.

Fertig kaufen kann jeder.

Für 2 Euro kaufen: gibt keinen Kenntnisgewinn.


Hier Beispielprogramm LED an/aus

Code: Alles auswählen

//Beispiel.c

#include <io.h> //Bindet die Anschlüsse PINs usw ein
#include <util/delay.h> //Bindet die Verzögerungsfunktion ein

#define F_CPU 8000000 //8Mhz RC Oszillatorfrquenz für die delay.h zur Berechnung

int main(void)     //Hauptprogramm
{
DDRB|=(1<<PB0); //Schaltet Pin B 0 auf Ausgang

while(1)  //Mach ne Schleife solgange 1 gleich 1 ist, also für immer ;)
{
_delay_ms(1000); //Sekunde Pause
PORTB|=(1<<PB0); //Port B Pin 0 an
_delay_ms(1000); //Sekunde Pause
PORTB&=~(1<<PB0); //Port B Pin 0 aus
} //Ende While Schleife
}//Ende main
das Übersetzt man mit avr-gcc und brennt es mit avrdude in den Atmel
Benutzeravatar
Zabex
Beiträge: 633
Registriert: Di 2. Jul 2013, 08:45
Wohnort: Aldenhoven
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Zabex »

Für 2€ kaufen kann einen grossen Erkenntnis Gewinn bringen. Ich selbst beherrsche die Atmel Familie auf C und Assembler Ebene. Und als Arduino. Letzteren verwende ich immer mehr.
Was ich inzwischen gelernt habe: Als Fachmann kann msn sich gar nicht mehr vorstellen, wie schwierig eine simple Programmierlösung für einen Anfänger ist. Hätte ich meiner Tochter erklären müssen wie man einen ATmega 328 mittels ISP flashed und mittels Portbefehlen den Pegel von Ausgangsleitungen setzen kann, dann würde sie bis heute Programmierjungfrau sein. Mit dem billigen Arduino und der doofen IDE hatte sie nach wenigen Minuten ihr Erfolgserlebnis. Es war ihr sicherlich total egal, was da im einzelnen vom Prozessor veranstaltet wurde. Hauptsache, die LEDs flimmern wie gewünscht.
Für mich ist der Arduino zum programmieren wie die Dachlatte zum Möbel bauen. Erklärung: Angenommen, ich brauche für eine Feier einen zusätzlichen Tisch. Da er in der Höhe genau zum bestehenden passen soll, will ich den bauen. Positiv: ich will ihn nicht fertig kaufen. Jetzt könnte ich mir 4 Beine drechseln, einen Rahmen keilverzinken und eine Leimholzplatte drauf dübeln. Nach allen Regeln der Tischlerzunft. Oder ich nehme Item-Profile, schraub damit ein Gestell zusammen und lege eine Siebdruckplatte drauf. Oder ich nehm ein paar Dachlatten, spax die zu einem Gestell zusammen und schraub mit ein paar Winkeln eine Spanplatte drauf. Vom gesparten Geld hole ich eine hochwertige Tischdecke.
Alle drei Lösungen ergeben einen Tisch, an dem man prima feiern kann. Jede Lösung braucht ein deutlich unterschiedliches handwerkliches Geschick, ist aber eine Lösung. Ich verstehe, dass jeder Tischler und jeder VielGeldBesitzer nur die erste Lösung akzeptieren möchte. Aber was ist an dem Dachlattentisch denn wirklich so schlecht? Man hat geringe Investitionskosten und ein schnelles und sicheres Erfolgserlebnis. Und genau da sehe ich den Arduino. Der kann einfach Spaß machen, weil er ziemlich simpel und ziemlich billig ist.
Morgen werde ich vier OneWire Temperaturfühler mittels ATmega an ein LC Display häkeln. Klar: das lass ich einen Arduino-Nano machen. OneWire, Dallas TemperaturLib und Lcd-Lib includiert, zwei handvoll Zeilen Code und fertig. Im wesentlichen zusammenkopiert aus den mitgelieferten Beispielen. Ohne einmal in die 600Seiten Prozessorhandbuch zu blicken und mich mit den ganzen Registern rumzuschlagen. Der Prozessor muss wahrscheinlich zehn mal so viel machen, als wenn ich das von Hand unter Ausnutzung der Hardwaremöglichkeiten codiert hätte. Für die Aufgabe ist das aber total egal.
Und:ich kann es hinterher jemandem recht einfach erklären.
Am Wochenende bin ich auf der Make in Dortmund. Ich freue mich schon auf das ganze kreative Geraffel das von Programmieranfängern mittels Arduino gesteuert wird.

Gruß,
Zabex
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Der AVR-/ARDUINO-Faden

Beitrag von Name vergessen »

Zabex hat geschrieben:Hätte ich meiner Tochter erklären müssen wie man einen ATmega 328 mittels ISP flashed und mittels Portbefehlen den Pegel von Ausgangsleitungen setzen kann
Nicht zu vergessen, daß sie zuerst den ISP-Adapter hätte bauen, dann avr-gcc und avrdude installieren und konfigurieren sowie die Befehlszeilensyntax herausbekommen müssen. Und wenn man noch nie vorher gelötet hat, ist das erstmal schon ein Problem, während Steckbretter durch ihre Unzuverlässigkeit gleich viel Frustpotential bergen. Das Viech hat seine Daseinsberechtigung, es räumt schonmal eine Menge Fehlerquellen aus dem Weg und spart auch eine Menge Zeit. Und wenn man dranbleibt, kommt das Datenblattlesen und avr-gcc irgerndwann von selber. Aber ich bin auch für den Vergleich des erzeugten Codes dankbar, denn das ist eine belastbarere Analyse als das eigene Bauchgefühl. :)
Benutzeravatar
Hightech
Beiträge: 11496
Registriert: So 11. Aug 2013, 18:37

Re: Der AVR-/ARDUINO-Faden

Beitrag von Hightech »

Keine Frage! Der Adruino ist DAS Einsteigerteil für Nichtlötkolbenhalterwindowsnutzer für einen leichten Einstieg.
Ebenso kann man als erfahrener Assembler die Teile nutzen um schnell das gewünschte Ergebiss zu erziehlen.

Die Kollegen hier im Forum sind aber keine kleinen Töchter mehr und können sich in 10Minuten einen ISP Adapter zusammenlöten.

ICH würde nicht mit der Adruino-IDE und der verknubbelten Sprache anfangen, wenn ICH mich erstmal an so was gewöhnt habe fällt es mir sehr schwer
zu z.B. C zu wechseln.
Wenn man dann doch mal an die Register will oder muss, ist es schwierig dann auf eine Ebene tiefer zu gehen.
Und man muss C für die einfachen Sachen mit dem Atmel nicht vollständig lernen.
Hier muss man nur mal an die Hand genommen werden für die grundsätzlichen Dinge, wie man sein Programm in den Chip bekommt.
Der Rest findet sich durch versuchen und im Internet.

Ich mag nicht zu weit von der Hardware weg gehen wie es der Adruino tut.
Lieber überlege ich mir, ob im Register TCCRA1 besser CS00 oder CS01 steht.

Das sollte man in der Lage sein, dann kann man auch mit wenigen Handgriffen einen anderen Chip nehmen, z.B. wenn das Programm eigentlich für einen Tiny ist kann man es für einen Mega88 umschreiben.
Benutzeravatar
ferdimh
Beiträge: 9430
Registriert: Fr 16. Aug 2013, 15:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von ferdimh »

Tatsächlich halte ich die Arduino-"Sprache" für eine sehr gute Idee. Sie ist nämlich ausreichend nah an C dran, dass man im Prinzip schonmal die Syntax lernt.
Das Setup/Loop-Konzept bringt einen "nebenbei" auch noch auf einen sehr guten Weg ein Mikrocontrollerprogramm zu schreiben. Leider ist hier ein Detail danebengegangen: Wenn diese Schleife noch timergesteuert wäre, wäre es noch schöner.
Ein Problem entsteht halt, wenn die Projekte komplexer werden und man krampfhaft am Arduino festhält und dann anfängt sich um die Arduinokonstrukte rumzuwürgen, weil sie zu langsam sind. Ein weiteres Problem entsteht, wenn die idiologische Diskussion losgeht.
Leider wird diese von beiden Seiten nicht sehr konstruktiv geführt. Ich habe in meinen Programmen immer SET_PIN und GET_PIN Makros. Ich habe Funktionen, um Timer automatisch passend zu initialisieren. Warum hat die AVR-Libc das nicht, so dass dieses (nicht unerhebliche) Stück Vereinfachung exklusiv den Arduinos zufällt?
Statt die Lücke kleiner zu machen rantet man lieber...
Benutzeravatar
phettsack
Beiträge: 1206
Registriert: Mo 12. Aug 2013, 18:17

Re: Der AVR-/ARDUINO-Faden

Beitrag von phettsack »

DIESER Faden nennt sich ja schliesslich auch "Arduino".

Zabex spricht mir aus der Seele. Ja, ich habe auf dem C64 angefangen zu programmieren, erst in Basic, dann in Simons-Basic und irgendwann sogar in Assembler mit dem SMON. Geile Scheisse:-) Später auch den Amiga mit Assembler gequält. Jetzt, Jahre später bin ich auch ergebnisorientiert.
Und jetzt? Diese kleinen Arduino-Platinchen oder der ESP8266 für wenig Euro aus Fernost. Dank der vielen Arduino-Libraries kommt man schnell zu einem Ergebnis. Temperatur auf einem OLED anzeigen, pffft, kein Thema. Kostenpunkt keine 10€.
Diesen Shield-Hype muss man ja nun nicht unbedingt mitmachen, vielleicht für einen Prototyp. Ja, vielleicht muss man dem ein oder anderen noch vermitteln, wie es unterhalb der Arduinooberfläche abläuft.
Was oft (auch mir manchmal fehlt) ist die Verwendung von Bauteilen wie Widerständen, ZDioden usw. Das man eben ein Relais nicht direkt am GPIO anpinnen kann sondern einen Transistor braucht.
Ja, direkt mit dem AVR-Studio kann man auch programmieren, das geht auch sehr komfortabel. Die Arduino-IDE ist nun auch nicht gerade ein Eye-Candy.

Direkt mit C ist das alles sicher noch effizienter. Aber: Unbenutzte Speicherzellen werden nicht in bar ausgezahlt und wenn es zu langsam oder komplex ist, nimmt man einen Raspberry ;)

Also, zankt euch nicht und verteufelt das Kram nicht. Einfach MACHEN und sich freuen das es geht.
Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der AVR-/ARDUINO-Faden

Beitrag von Profipruckel »

Hightech hat geschrieben:Keine Frage! Der Adruino ist DAS Einsteigerteil für Nichtlötkolbenhalterwindowsnutzer für einen leichten Einstieg.
Ich bin Windowsbenutzer und sehe keinen Grund, mich dafür zu schämen oder rechtfertigen zu müssen, Punkt.

Einen Lötkolben kann ich halten, seit ungefähr 45 Jahren! Ganz nett dabei, dass ich aktuell bevorzugt den halte, der von einem Arduino geregelt wird: (http://www.fingers-welt.de/phpBB/viewto ... 50#p117043) Sieht das so aus, als ob ich nicht löten könnte?
Hightech hat geschrieben:Die Kollegen hier im Forum sind aber keine kleinen Töchter mehr und können sich in 10Minuten einen ISP Adapter zusammenlöten.
Ja und Nein - hier im Forum tauchen zunehmend kleine Jungs auf, die einen Transistor nicht von einem Relais unterscheiden können und einen ISP-Adapter eben nicht könnten.
phettsack hat geschrieben:DIESER Faden nennt sich ja schliesslich auch "Arduino".
Danke für den Hinweis.
phettsack hat geschrieben:Zabex spricht mir aus der Seele.
Dem schließe ich mich an, sein Beispiel mit dem Dachlattentisch trifft den Kern.
phettsack hat geschrieben:Jetzt, Jahre später bin ich auch ergebnisorientiert.
Danke, so etwa habe ich das auch formuliert, ist aber scheinbar nicht verstanden worden.

Mein Einstieg in Prozessor und Controller war per Assembler, mit viel Zeitaufwand und hinreichend Frust. Ich bin sicher, dass ich auch einen AVR in Assembler beherrschen könnte. Ich will es aber garnicht, solange Arduino meine Anforderungen erfüllen kann.
phettsack hat geschrieben:Einfach MACHEN und sich freuen das es geht.
Amen. Und mit diesem, Deinem Schlußwort, beenden wir den Glaubenskrieg Arduino gegen Rohprozessor.
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Der AVR-/ARDUINO-Faden

Beitrag von Name vergessen »

@ Zabex: ich denke darüber nach, wie Du die Auflösung des im Atmega48 vorhandenen ADC durch Oversampling aufzumotzen. Jetzt hast Du auf Deiner HP geschrieben, daß der den Noise mittels eines PWM-Ausgangs erzeugt wird, der über ein RC-Glied daraus eine Dreiecksspannung macht. Das muß also schonmal nicht sooo toll dreieckig sein, sonst bräuchte es noch eine KSQ -> OK.
Leider werden bei mir bereits alle 6 PWM-Ausgänge anderweitig gebraucht, da ist keiner frei. Was aber frei wäre, ist CLKO (PB0). Die Frage ist jetzt: stört es, daß der ja zwangsweise synchron zum CPU-Takt (16MHz (internes RC) oder 20MHz (externer Quarz), muß ich noch gucken) und somit ggfs. auch irgendwie synchron zum ADC-Takt rennt? Der ADC braucht ja mehrere Zyklen zum Wandeln, also rennen derweil jede Menge Dreiecke dran vorbei, so daß ich mit Pech immer dieselbe Stelle treffe und somit keinen Rauscheffekt bekomme? Deine PWM ist ja auch irgendwie an den CPU-Takt gebunden, insofern könnte die zwar auch synchron laufen, aber immerhin nicht schneller als der Sampletakt. Knicken und NE555 oder sonstige Flipflopschaltung nehmen oder egal?
Benutzeravatar
Zabex
Beiträge: 633
Registriert: Di 2. Jul 2013, 08:45
Wohnort: Aldenhoven
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Zabex »

So besonders genau ist die Oversampling Geschichte sowieso nicht. Also schlage ich vor, du suchst dir einen freien Pin, auf den du ein Rechtecksignal programmierst. An den Port dann ein simples RC Glied. Dessen Ausgang ist kein Dreieck, aber was solls. Du kannst ja die Exponentielle Verteilung durch die Kondensator Ladekurve bei der Bewertung der ADC Ergebnisse. berücksichtigen.
Ein LM324 als Dreiecksgenerator wäre eine Alternative. Ein externer 16Bit ADC auch (z. B. MCP3426, Reichelt 2,67€)
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Der AVR-/ARDUINO-Faden

Beitrag von Name vergessen »

Hm, eine Reichelt-Bestellung ist leider erstmal nicht in Sicht, ansonsten wären die Viecher allein schon zum auf Halde legen sinnvoll. Wäre schön gewesen, wenn noch eine eingebaute Funktion genutzt werden hätte können. :) Welche Frequenz nehme ich eigentlich am Besten? Sicher irgendwas oberhalb der Samplingfrequenz, ideal genau so lange, wie ich Messungen anhäufe? Meine Idee wäre dann jetzt, den Pin genau immer dann zu toggeln, wenn ich eine Meßreihe zusammen habe?
Benutzeravatar
reutron
Beiträge: 1953
Registriert: Mo 12. Aug 2013, 19:58
Wohnort: Gottow
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von reutron »

Bei Elektor gibt es das Buch hier.....bis zum 4.4.2016

Bild
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Der AVR-/ARDUINO-Faden

Beitrag von Name vergessen »

Hm, ich bekomme Gutscheincode ist ungültig". Muß man das über ein Schmierphone machen?
Benutzeravatar
Münsterländer
Beiträge: 329
Registriert: Fr 11. Okt 2013, 14:55
Wohnort: Borken (bei Holland)

Re: Der AVR-/ARDUINO-Faden

Beitrag von Münsterländer »

Bei mir läuft der Download vom PC problemlos. Danke für den Tipp!
ozonisator
Beiträge: 1653
Registriert: So 11. Aug 2013, 19:53
Wohnort: bei Frankfurt/Main

Re: Der AVR-/ARDUINO-Faden

Beitrag von ozonisator »

Wollte mal auf das Projekt hier: https://github.com/micronucleus/micronucleus aufmerksam machen. USB Bootloader für Attinys. Zusammen mit V-USB und einem defekten USB-Stick kann man so wunderbar einen Tastatur-Emulator bauen, der die Konsole öffnet, einen Texteditor ausführt, einen Batch Virus runterschreibt, speichert, alle Fenster schließt und den Virus ausführt :twisted:
Was auch lustig ist: das Teil unbemerkt einstöpseln, und in zufälligen Abständen ALT+F4 senden :lol:
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

Gibt auch nen V-USB Bootloader, der sich als USBasp meldet.
Der ist dann aber natürlich etwas größer vom Code her.
Sir_Death
Beiträge: 3446
Registriert: Mo 11. Mai 2015, 22:36
Wohnort: südlich von Wien

Re: Der AVR-/ARDUINO-Faden

Beitrag von Sir_Death »

reutron hat geschrieben:Bei Elektor gibt es das Buch hier.....bis zum 4.4.2016

Bild

Cool! - Danke für den Tipp - schon gesichert.
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Der AVR-/ARDUINO-Faden

Beitrag von Name vergessen »

Ich doktore gerade an der 16 Bit PWM herum, um einen Analogwert zu basteln. Die läuft mit "Fast" PWM bei 16 MHz mit 244Hz, was schonmal nicht ganz so leicht zu filtern ist (die 16 Bit machen ja keinen Sinn, wenn der Ripple darauf 40mVpp ist...). Um das auch nur einigermaßen glattzubiegen brauche ich schon einen Tiefpaß 3. Ordnung, und zwar 10K-470nF-22K-220nF-47K-100nF. Das habe ich auf dem Steckbrett zusammengemurkst, kann das hinkommen oder ist da was faul?

BTW, das mit dem aktiven TP vor einiger Zeit war tatsächlich Murks, der C am OP hatte keinerlei filternde Wirkung. Habe das dann nochmal mit einem normalen Sallen-Key Filter probiert, das hat aber (wenn überhaupt) bei 1 KHz nur marginal besser geglättet als ein passiver TP 2. Ordnung, und dann bei den 244Hz angefangen zu schwingen (jede ca. 10. Welle war erheblich kleiner). Letzteres mag am Steckbrettverhau in Kombination mit dem Zusatztransistor usw. gelegen haben, oder mit Pech war die Wertekombi (aus dem Bild letztens) einfach ungünstig.
Benutzeravatar
ferdimh
Beiträge: 9430
Registriert: Fr 16. Aug 2013, 15:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von ferdimh »

Kannst du mal nen Schaltplan skizzieren und hier einstellen? Ich komme da nicht ganz mit, was du versucht hast.
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

Sallen Key ist eben nicht gleich Sallen Key.
Da kann die RC Kombi zwar rechnerisch deine gewünschte Frequenz erreichen, aber die Filtercharakteristik ist Murks oder der Sallen Key schwingt sogar.

Daher mit nem Tool ausrechnen lassen und dann auf dem Steckbrett testen.
http://sim.okawa-denshi.jp/en/OPseikiLowkeisan.htm
Benutzeravatar
ferdimh
Beiträge: 9430
Registriert: Fr 16. Aug 2013, 15:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von ferdimh »

Ergänzend den Kram in SPICE simulieren und nochmal in Echt messen (insbesondere bei Filtern 3. Ordnung).
Einige Bauteilwerte sind sehr empfindlich, andere weniger. Wenn man es mit einem Emitterfolger aufbaut, unbedingt damit simulieren!
Die Nicht-ganz-1-Verstärkung eines Emitterfolgers reicht aus, um alle shcönen Berechnungen zu verbiegen.
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Der AVR-/ARDUINO-Faden

Beitrag von Name vergessen »

Danke für die Antworten! Das, was geschwungen hat, ist dieses Gebilde:
Bild
Wahrscheinlich ist der Abzweig direkt am OP falsch und gehört eigentlich aber hinter die Transe, aber dazu hatte ich keine Idee. Da aber der passive TP nicht schlechter ist, was soll's. Der OP war 1/4 LM324, dessen zweites Viertel vergleichend den passiven TP davor hatte. Die beiden anderen waren unbeschaltet, das würde in der Endversion natürlich nicht passieren.

Für die 16 Bit wird die Zusatztranse aber nicht benutzt, das wäre dann nur der OP als Spannungsfolger mit passivem TP davor (RCRCRC, Werte wie im vorigen Post), oder als aktiver SK-TP und einem passiven TP davor wie bei Wikipedia. Ist am Ende offenbar egal, mit dem SK brauche ich genau gleich viele Teile wie mit dem passiven TP.

Einerseits verstehe ich jetzt, weshalb die meisten Leute nur die 8 Bit PWM benutzen, andererseits nicht, wie das mit Klasse D überhaupt irgendwie funktioniert, da braucht man ja allein dafür mindestens 3,2 GHz, um da mit 16 Bit auch nur auf die 20 KHz zu kommen? :shock: Oder wird da was aus zwei 8 Bit PWM zusammengefummelt, so wie hier?

Muß ich wirklich auf 1K+100µF gehen, damit das am Ende sauber ist? :(
Benutzeravatar
Fritzler
Beiträge: 12604
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der AVR-/ARDUINO-Faden

Beitrag von Fritzler »

ClassD Amps erzeugen die PWM ja analog, da haste son Problem nicht oder es wird ein "1 Bit DAC" genutzt.
Zudem bräuchteste 44kHz Samplerate und nicht 20KHz, also fast 7GHz :lol:

Sallen Key und Stromregler in einen Opamp packen ist nicht die beste Idee, das sollte schon in 2 Opamps erledigt werden und mit dem LM324 haste ja genug davon.
Wahrscheinlich ist der Abzweig direkt am OP falsch und gehört eigentlich aber hinter die Transe
Hä?
Benutzeravatar
ferdimh
Beiträge: 9430
Registriert: Fr 16. Aug 2013, 15:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von ferdimh »

Dieser Tiefpass ist nicht wirklich sinnvoll. Das braucht einen exakten Folger, sonst tut das nicht. Es macht hier bei den Preisen für 4fach-Opamps auch keinen Sinn zu geizen und mit Kunstschaltungen anzufangen (und ich erwische micht ständig wieder dabei).
Ein LM324 macht bei unbeschalteten Eingängen keinen Blödsinn.
Der Trick mit den Class-D-Endstufen ist in mehreren Varianten verfügbar:
a) Sinnvoll: Analoge PWM-Erzeugung. Damit ist die Frage der Quantisierung von selbst erledigt, man kann außerdem tatsächlich gegenkoppeln.
b) Billig: Noise Shaping. Es wird kein Sägezahn zum vergleichen genutzt. Stattdessen wird ein deutlich aufwendigerer Algorithmus verwendet, der ein sehr viel hochfrequenzlastigeres Signal erzeugt (das Grundprinzip heißt Delta-Sigma-Modulation). Das funzt als Wandler 2. Ordnung ganz ok, wenn die Betriebsspannung konstant ist, und ist ein sehr guter (der Beste?) Weg, einen D/A-Wandler zu implementieren. Erst Logik, dann Tiefpass ist sehr einfach zu bauen und heilt quasi alle Krankheiten konventioneller D/A-Wandler (Bei einem klassischen R-2R-Wandler hängt die Genauigkeit im Wesentlichen von der Genauigkeit des höchstwertigen Widerstandes ab. Da das Ausgangssignal meistens nur ein Bisschen um die Mitte wackelt, kippelt das höchste Bit ständig, und ein Fehler dort ist SEHR gut hörbar.
c) Sehr billig: Dithering mit "gespiegeltem Sägezahn". Statt mit stetig steigenden Zahlen zu vergleichen, wie bei der klassischen PWM, nimmt man einen Zähler, lässt ihn immer von Null bis Vollstoff laufen, spiegelt das Bitmuster, und vergleicht damit. Bei einem 4-Bit Wandler sieht das so aus:
|:0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15:| Wenn man jetzt mit z.B. mit der 6 (<) vergleicht, ergibt sich |:1010100010101000:| Das gibt ein deutlich schnelleres Wackeln, das von der Performance mit einem Delta-Sigma-Wandler 1. Ordnung vergleichbar ist (es kommt nicht ganz ran). Das findet sich soweit ich weiß im "ach so tollen" Audioausgang vom Raspberry Pi, mit 48MHz Takt.
d) Chinastandard: Scheiß auf Auflösung. 8Bit sind für Musik vollkommen ausreichend.
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Der AVR-/ARDUINO-Faden

Beitrag von Name vergessen »

Fritzler hat geschrieben:Sallen Key und Stromregler in einen Opamp packen ist nicht die beste Idee, das sollte schon in 2 Opamps erledigt werden und mit dem LM324 haste ja genug davon.
Naja, der LM324 wird ohnehin voll genutzt werden, sonst hätte ich einen LM358 genommen. ;) Natürlich könnte ich noch einen nehmen, aber wenn der aktive TP eh keine Vorteile im Frequenzgang bringt, ist das wohl eher was für schwachbrüstige Signale?
Fritzler hat geschrieben:
Wahrscheinlich ist der Abzweig direkt am OP falsch und gehört eigentlich aber hinter die Transe
Hä?
Ich ging davon aus, daß der Transistor als Teil der Regelkette dann eben auch Teil des Filters werden müßte (Rückkopplung über alles), nur konnte ich mir keinen sinnvollen Punkt vorstellen, an dem der Kondensator angeschlossen werden könnte. Es kämen ja nur in Frage: am Emitter oder am Kollektor, beides kommt mir aber unrichtig vor.
ferdimh hat geschrieben:Dieser Tiefpass ist nicht wirklich sinnvoll. Das braucht einen exakten Folger, sonst tut das nicht. Es macht hier bei den Preisen für 4fach-Opamps auch keinen Sinn zu geizen und mit Kunstschaltungen anzufangen (und ich erwische micht ständig wieder dabei).
OK, also einen zweiten OP dahinter. Naja, da die minimale Verbesserung mit aktivem TP vermutlich entweder pure Einbildung oder das Produkt geänderter Drahtführung war, werde ich das also einfach lassen und passiv aufbauen, damit umgehe ich diese Probleme und Nachteile scheint das ja nicht zu haben. :)
ferdimh hat geschrieben:Ein LM324 macht bei unbeschalteten Eingängen keinen Blödsinn.
Gut zu wissen, ich fühlte mich schon etwas schuldig. :)
ferdimh hat geschrieben:Der Trick mit den Class-D-Endstufen ist in mehreren Varianten verfügbar:
a) Sinnvoll: Analoge PWM-Erzeugung. Damit ist die Frage der Quantisierung von selbst erledigt, man kann außerdem tatsächlich gegenkoppeln.
b) Billig: Noise Shaping. Es wird kein Sägezahn zum vergleichen genutzt. Stattdessen wird ein deutlich aufwendigerer Algorithmus verwendet, der ein sehr viel hochfrequenzlastigeres Signal erzeugt (das Grundprinzip heißt Delta-Sigma-Modulation). Das funzt als Wandler 2. Ordnung ganz ok, wenn die Betriebsspannung konstant ist, und ist ein sehr guter (der Beste?) Weg, einen D/A-Wandler zu implementieren. Erst Logik, dann Tiefpass ist sehr einfach zu bauen und heilt quasi alle Krankheiten konventioneller D/A-Wandler (Bei einem klassischen R-2R-Wandler hängt die Genauigkeit im Wesentlichen von der Genauigkeit des höchstwertigen Widerstandes ab. Da das Ausgangssignal meistens nur ein Bisschen um die Mitte wackelt, kippelt das höchste Bit ständig, und ein Fehler dort ist SEHR gut hörbar.
c) Sehr billig: Dithering mit "gespiegeltem Sägezahn". Statt mit stetig steigenden Zahlen zu vergleichen, wie bei der klassischen PWM, nimmt man einen Zähler, lässt ihn immer von Null bis Vollstoff laufen, spiegelt das Bitmuster, und vergleicht damit. Bei einem 4-Bit Wandler sieht das so aus:
|:0 8 4 12 2 10 6 14 1 9 5 13 3 11 7 15:| Wenn man jetzt mit z.B. mit der 6 (<) vergleicht, ergibt sich |:1010100010101000:| Das gibt ein deutlich schnelleres Wackeln, das von der Performance mit einem Delta-Sigma-Wandler 1. Ordnung vergleichbar ist (es kommt nicht ganz ran). Das findet sich soweit ich weiß im "ach so tollen" Audioausgang vom Raspberry Pi, mit 48MHz Takt.
d) Chinastandard: Scheiß auf Auflösung. 8Bit sind für Musik vollkommen ausreichend.
Oha. Gibt es Delta-Sigma-Modulations-DAs auch einzeln? Das sollte dann ja billiger sein als Hochgeschwindigkeits-DAs.
Das mit der analogen PWM-Erzeugung blicke ich leider nicht; wenn das Signal schon analog ist, braucht man doch den Wandler nicht mehr...?


Den Filterrechner habe ich mal bemüht und ich sehe auch Unterschiede im Dämpfungsfaktor; aus den probierten Werten und Ergebnissen schließe ich, daß das nicht die Dämpfung der zu sperrenden Frequenzen ist (die ist bei einem TP der Ordnung X ja immer gleich), sondern des Gesamtsignals->je niedriger desto besser. Ist 1,3 generell akzeptabel oder muß das ganz woanders liegen?

Und ich habe mit dem Tool den schwingenden Filter probiert. In meiner Anordnung errechnet der eine Schwingfrequenz von 159 Hz... paßt zwar nicht ganz zu den 244Hz, reicht aber wohl. War ja klar, daß ich da wieder genau die Sch*iße treffe. :( Hätte ich die Kondis beide mit 15n benutzt, hätte das nicht geschwungen. Gut, andererseits weiß ich jetzt, daß bei einem SKF C2 anscheinend niemals kleiner sein darf als C1, sonst schwingt es. Ist ja auch schon was. Warum steht sowas eigentlich nirgends? Naja, es stimmt immerhin mit dem Text von TI überein, wo man immer C2=2*C1 nehmen soll.

Mann mann, ich glaube, 1K und 100µF wären bequemer, aber die Reaktionszeit davon ist mit 0,7s eher mau, und selbst dann dämpft es nicht gut genug... abgesehen davon: spricht eigentlich etwas gegen Elkos?

Á propos Elkos: beim Gucken, was andere Leute so machen, habe ich gesehen, daß die mit Widerständen von 330 Ohm aufwärts loslegen; hat das, trotz des folgenden OPs, Vorteile, so niedrige Widerstände (und entsprechend größere Kondensatoren) zu benutzen?
Benutzeravatar
Marsupilami72
Beiträge: 2879
Registriert: Mo 4. Nov 2013, 23:48
Wohnort: mittendrin

Re: Der AVR-/ARDUINO-Faden

Beitrag von Marsupilami72 »

reutron hat geschrieben:Bei Elektor gibt es das Buch hier.....bis zum 4.4.2016

Bild
Ich hab die Aktion voll verpennt, kann mir einer das Pdf zuschicken (ganzliebguck ;) ?
Zuckermais
Beiträge: 71
Registriert: So 11. Aug 2013, 15:47

Re: Der AVR-/ARDUINO-Faden

Beitrag von Zuckermais »

nö, die sind mit einem Wasserzeichen versehen. Das fällt auf, wenn ich das jemanden zusende.

Zuckermais
Benutzeravatar
Marsupilami72
Beiträge: 2879
Registriert: Mo 4. Nov 2013, 23:48
Wohnort: mittendrin

Re: Der AVR-/ARDUINO-Faden

Beitrag von Marsupilami72 »

Dass ich das nicht weiter verteile, sollte wohl selbstverständlich sein.

Ich habe das PDF aber schon von einem anderen User bekommen - das Thema hat sich also erledigt.
Benutzeravatar
ferdimh
Beiträge: 9430
Registriert: Fr 16. Aug 2013, 15:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von ferdimh »

atürlich könnte ich noch einen nehmen, aber wenn der aktive TP eh keine Vorteile im Frequenzgang bringt, ist das wohl eher was für schwachbrüstige Signale?
Der aktive Tiefpass hat (genau wie sein LC-Äquivalent) gegenüber RC massive Vorteile im Frequenzgang, wenn er richtig dimensioniert ist. Dafür ist genau die gegebene "Schwingneigung" verantwortlich.
Ein RC-Tiefpass hat einen "weichen" Knick. Wenn man davon mehrere kaskadiert, hat man mehrere weiche Knicke.
Das Draufsetzen einer Resonanz drückt einen härteren Knick rein, indem es erst hochdrückt (Tiefpass fällt ab, Resonanz steigt) und dann runterdrückt (Resonanz fällt ab, Tiefpass auch). Das macht Filter möglich, die einer Mauer sehr nahe kommen. Mit RC hat man immer einen weichen Übergang.
Ich ging davon aus, daß der Transistor als Teil der Regelkette dann eben auch Teil des Filters werden müßte (Rückkopplung über alles), nur konnte ich mir keinen sinnvollen Punkt vorstellen, an dem der Kondensator angeschlossen werden könnte. Es kämen ja nur in Frage: am Emitter oder am Kollektor, beides kommt mir aber unrichtig vor.
Es gibt auch ohne keinen "richtigen" Punkt dafür. Der Emitter wäre von der Phasenlage her richtig, ist aber hochohmig und damit tabu(Aller Strom, der da fließt, fließt auch durch die Last). Man könnte versuchen eine "am wenigsten falsche" Lösung zu finden, aber auf die Schmerzen habe ICH keine Lust.
Das mit der analogen PWM-Erzeugung blicke ich leider nicht; wenn das Signal schon analog ist, braucht man doch den Wandler nicht mehr...?
Wenn ich meine Leistungsstufe mit PWM bauen will (aus Wirkungsgradgründen), dann brauche ich nunmal ne PWM aus einem analogen Signal. PWM ist mehr als "Billiger DAC-Ersatz von Mikrocontrollern". Das ist ja letzten Endes die Idee des Class-D. Dass das irgendwie Digital und Toll sein soll haben Marketingstrategen angedichtet.
Den Filterrechner habe ich mal bemüht und ich sehe auch Unterschiede im Dämpfungsfaktor; aus den probierten Werten und Ergebnissen schließe ich, daß das nicht die Dämpfung der zu sperrenden Frequenzen ist (die ist bei einem TP der Ordnung X ja immer gleich), sondern des Gesamtsignals->je niedriger desto besser. Ist 1,3 generell akzeptabel oder muß das ganz woanders liegen?
Der Frequenzgang muss Sinn ergeben und zur Anwendung passen. Wenn das Ding eh beliebig träge sein darf (was ich langsam vermute) ist die Güte egal, und man kann tatsächlich jeden beliebigen Wert verwenden.
Ein Hochpass vor einem Hochtöner in einer Box wird eher eine hohe Güte haben, weil der Hochtöner nach unten hin weniger kann (die Überhöhung kompensiert das etwas), der dazugehörige Tiefpass aber eine niedrige (dafür evtl eine Ordnung mehr), weil der Frequenzgang des Tieftöners in der Regel sowieso zu hohen Frequenzen hin langsam ansteigt (Die Membran fängt an zu machen, was sie will -> Resonanzen -> mehr Dampf). Der langsam fallenden Tiefpass kompensiert das so.
Name vergessen
Beiträge: 3261
Registriert: Mo 12. Aug 2013, 19:47

Re: Der AVR-/ARDUINO-Faden

Beitrag von Name vergessen »

ferdimh hat geschrieben:Der aktive Tiefpass hat (genau wie sein LC-Äquivalent) gegenüber RC massive Vorteile im Frequenzgang, wenn er richtig dimensioniert ist. Dafür ist genau die gegebene "Schwingneigung" verantwortlich.
Ein RC-Tiefpass hat einen "weichen" Knick. Wenn man davon mehrere kaskadiert, hat man mehrere weiche Knicke.
Das Draufsetzen einer Resonanz drückt einen härteren Knick rein, indem es erst hochdrückt (Tiefpass fällt ab, Resonanz steigt) und dann runterdrückt (Resonanz fällt ab, Tiefpass auch). Das macht Filter möglich, die einer Mauer sehr nahe kommen. Mit RC hat man immer einen weichen Übergang.
Aha, OK. Ich habe die Bildchen vom Frequenzgang zwar verglichen, aber diesen Unterschied nicht gesehen, muß ich wohl nochmal gucken!
ferdimh hat geschrieben:Es gibt auch ohne keinen "richtigen" Punkt dafür. Der Emitter wäre von der Phasenlage her richtig, ist aber hochohmig und damit tabu(Aller Strom, der da fließt, fließt auch durch die Last). Man könnte versuchen eine "am wenigsten falsche" Lösung zu finden, aber auf die Schmerzen habe ICH keine Lust.
Hm, naja, immerhin habe ich dann keine offensichtliche Lösung übersehen. :) Ist auch für die Anwendung nicht wichtig genug, sich da so viel Arbeit zu machen, mir fehlt halt nur komplett das Gefühl für das analoge Zeug, da muß ich mich reinfinden und offenbar erstmal alle Fallen ausprobieren. :)
ferdimh hat geschrieben:Wenn ich meine Leistungsstufe mit PWM bauen will (aus Wirkungsgradgründen), dann brauche ich nunmal ne PWM aus einem analogen Signal. PWM ist mehr als "Billiger DAC-Ersatz von Mikrocontrollern". Das ist ja letzten Endes die Idee des Class-D. Dass das irgendwie Digital und Toll sein soll haben Marketingstrategen angedichtet.
Ah, OK. Daß man PWM auch analog erzeugen kann, klar; ich hatte das so gelesen, daß das irgendwie zur DAC-Wandlung gehören könnte.
ferdimh hat geschrieben:Der Frequenzgang muss Sinn ergeben und zur Anwendung passen. Wenn das Ding eh beliebig träge sein darf (was ich langsam vermute) ist die Güte egal, und man kann tatsächlich jeden beliebigen Wert verwenden.
Naja, im Dezisekundenbereich sollte es schon noch liegen, schneller wäre nett, aber mehr auch nicht. Ich versuche eher, hinter die ganze Sache zu blicken und Ahnung zu bekommen, was wofür wichtig ist. Ich habe jetzt den TP 3. Ordnung mit 10K->1µF->22K->470nF->47K->220nF, damit sehe ich unter dem ganzen Rauschen keinen Sägezahn mehr und es reagiert noch schnell genug, kann also so bleiben.
ferdimh hat geschrieben:Ein Hochpass vor einem Hochtöner in einer Box wird eher eine hohe Güte haben, weil der Hochtöner nach unten hin weniger kann (die Überhöhung kompensiert das etwas), der dazugehörige Tiefpass aber eine niedrige (dafür evtl eine Ordnung mehr), weil der Frequenzgang des Tieftöners in der Regel sowieso zu hohen Frequenzen hin langsam ansteigt (Die Membran fängt an zu machen, was sie will -> Resonanzen -> mehr Dampf). Der langsam fallenden Tiefpass kompensiert das so.
Die Güte ist also die Schräge der Kurve? Ich dachte, das wäre immer 60dB / Oktave? Zwar habe ich schon gelesen, daß mit höherer Güte die Peaks (bzw. Täler) steiler und dafür schmaler werden, aber wie paßt das zusammen mit der Angabe XdB / Oktave?
Ist schon etwas frustrierend, wenn man tagelang über Filter liest und dann trotzdem die einfachsten Dinge nachfragen muß. :(
Benutzeravatar
ferdimh
Beiträge: 9430
Registriert: Fr 16. Aug 2013, 15:19

Re: Der AVR-/ARDUINO-Faden

Beitrag von ferdimh »

´Die Güte ist also die Schräge der Kurve? Ich dachte, das wäre immer 60dB / Oktave? Zwar habe ich schon gelesen, daß mit höherer Güte die Peaks (bzw. Täler) steiler und dafür schmaler werden, aber wie paßt das zusammen mit der Angabe XdB / Oktave?
Nein.
Zwei getrennte Baustellen.
a) Die Steigung der Kurve weit oberhalb der Grenzfrequenz (wir betrachten hier jetzt nur Tiefpässe!) . Die hängt nur von der Filterordnung ab.
b) Das Verhalten um die Grenzfrequenz rum. Hier ist die Auslegung des Filters entscheidend. Ein Butterworth versucht so flach zu sein wie möglich, ein Tschebyscheff lässt eine Welligkeit zu (hat dafür einen härteren Knick), ein Bessel ist für Phasenverhalten optimiert. Bei einem Tiefpass 2. Ordnung gibt es nur einen Buckel, desen "Hubbeligkeit" durch die Güte beschrieben wird. Je höher die Güte (=1/Dämpfung) desto spitzer piekt es da raus. Man kann jetzt natürlich mehrere Filter mit verschiedenen Grenzfrequenzen und Güten kaskadieren, so dass noch im Durchlassbereich der erste Peak liegt, danach folgt steiler Abfall, der aber von der nächsten Filtersektion wieder aufgefangen wird (es geht auf die nächste Resonanz zu), usw. Bei ausreichend "sportlicher" Auslegung kommen dabei Filter raus, die 20kHz noch mit -3dB durchlassen, aber bei 22kHz schon 60dB oder so dämpfen. Als Anschauungsobjekt habe ich hier mal den Frequenzgang einer Soundkarte aus dem Netz gezogen; der steile Knick ist deutlich sichtbar, die Welligkeit vorher auch:
Bild
Antworten