Show Posts
Pages: 1 ... 191 192 [193] 194 195 ... 232
2881  Forum 2005-2010 (read only) / Deutsch / Re: Arduino Duemilanove freier RAM Anzeige on: April 14, 2010, 04:14:13 pm
@ChrissS Zur Erinnerung: ich hatte nicht gesagt, ich hätte grundsätzlich keine Zeit. Ich hatte gesagt, ich habe dafür keine Zeit weil ich es für wenig sinnvoll halte. Die Gründe hatte ich schon aufgeführt.

Davon abgesehen: lies doch einmal das was ich im Playground abgelegt habe bevor Du wieder um ein Tutorial bettelst:

http://www.arduino.cc/playground/Deutsch/HomePage verweist auf
http://www.mikrocontroller.net/articles/AVR-Tutorial

Und dort steht was?
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Speicher
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Speicherzugriffe

D.h. es gibt bereits ein sehr gutes deutsches Tutorial. Nur steht da nicht dauernd drin "alles was hier steht gilt auch für den Arduino".

Was den "Experten" angeht: ich bin KEIN Experte. Ich habe nur die genannten Tutorials durchgelesen und lese gelegentlich auch die Datenblätter.

Udo
2882  Forum 2005-2010 (read only) / Deutsch / Re: Arduino Duemilanove freier RAM Anzeige on: April 14, 2010, 02:10:02 pm
Wie sollte das gehen? Der Compiler kann ja nicht wissen was das Programm zur Laufzeit so alles tun wird. --> es geht nicht.
2883  Forum 2005-2010 (read only) / Deutsch / Re: Arduino Duemilanove freier RAM Anzeige on: April 13, 2010, 02:01:59 pm
Serielle Schnittstelle und Strings haben nur zufällig etwas miteinander zu tun. Man gibt häufig Strings über die serielle Schnittstelle aus, daß ist alles.

Die Sache mit den Strings liegt daran, daß die Atmels eine Harvard Architektur (Programm und Variablenspeicher sind getrennt) haben und C Compiler für von Neumann Architekturen (ein Speicher für alles) ausgelegt sind.

Der Compiler löst das so, daß eben Programme in den Flash Speicher kommen aber alle Variablen bei der Initialisierung ins Ram kopiert werden. Er kann ja nicht wissen, daß die Strings sich nicht ändern sollen. OK, er könnte es wissen aber es hilft nichts weil die Speicherarithmetik dann anders ist.

Da der Compiler also nicht selber weiss was gewünscht ist nimmt er wenn man nichts sagt daß, was bei einer von Neumann Architktur passieren würde --> die Strings kommen ins Ram. Wenn man mit den Makros arbeitet passiert das nicht. Aber man kann dann die normalen Stringfunktionen nicht mehr benutzen weil die ja für eine von Neumann Architektur ausgelegt sind.
2884  Forum 2005-2010 (read only) / Deutsch / Re: Arduino Duemilanove freier RAM Anzeige on: April 12, 2010, 03:44:32 pm
Also mir ist der Unterschied zwischen den verschiedenen Speicherarten jedenfalls klar:

0) Register
1) RAM, die Atmels haben nur SRAM, kein DRAM, hier liegen Variablen. Inhalte gehen nach Strom abschalten verloren. Nicht nach Reset!!!
2) EEPROM, persistenter Speicher für Daten die das Programm kontrolliert
3) Flash, persistenter Speicher für das Programm

Das kompilierte C Programm wird im Flash gespeichert. Wenn da der Platz nicht reicht, dann kann man das Programm schon gar nicht sinnvoll in den Prozessor schreiben. Das Programm wird immer im Flash ausgeführt. Nur die Variablen kommen ins RAM.

Zur Laufzeit kann es sein, daß das RAM nicht reicht. Das liegt daran, daß der Stack und der Heap von verschiedenen Seiten allokiert werden. Sobald man zuviel Platz verbraucht kommen sich Stack und Heap in die Quere. Danach geht einiges (bzw. so ziemlich alles) schief.

Ob noch Platz ist ermittle ich so:

Code:
void free_dump() {

      uint8_t *heapptr;
      uint8_t *stackptr;

      stackptr = (uint8_t *)malloc(4);   // use stackptr temporarily
      heapptr = stackptr;                // save value of heap pointer
      free(stackptr);                    // free up the memory again (sets stackptr to 0)
      stackptr =  (uint8_t *)(SP);       // save value of stack pointer


      // print("HP: ");
      pgm_print(PSTR("HP: "));
      println((int) heapptr, HEX);

      // print("SP: ");
      pgm_print(PSTR("SP: "));
      println((int) stackptr, HEX);

      // print("Free: ");
      pgm_print(PSTR("Free: "));
      println((int) stackptr - (int) heapptr, HEX);
      println();
}

Das ist nicht ganz so gefährlich wie die von ChrisS beschrieben Methode. Die hatte ich früher mal im Einsatz und damit eher schlechte Erfahrungen gemacht. Grund: sie schlägt zu spät an. Ich habe nie analysiert warum genau, aber die Methode oben scheint bisher zuverlaessig zu funktionieren.


pgm_print und print sind Spezialversionen weil ich schon die Print Library rausgekegelt habe (verbraucht unnötig Ram und Flash und bei mir ist es eng). Einfach wieder durch die normalen Serial.prints ersetzen.

Regelmaessig kommt die größte unnötige Rambelegung daher, daß eigentlich konstante Strings im Ram abgelegt werden. Daß kann man mit den "Progmem" Makros beheben.

http://www.arduino.cc/en/Reference/PROGMEM
http://www.cs.mun.ca/~paul/cs4723/material/atmel/avr-libc-user-manual-1.6.5/pgmspace.html

Das ist allerdings nichts für Anfänger. Mit den Progmem Makros kann man sich ganz schön selber austricksen. Allerdings holt das mit am Meissten raus.

Was dann auch noch ganz schön reinhaut ist der relativ große Puffer für die serielle Kommunikations.

Die einfachste Massnahme ist grundsätzlich einfach den nächstgrößeren Prozessor zu nehmen. Wenn das nicht geht siehe oben. Wenn Flash das Problem ist --> auf ISP umsteigen und als erstes den Bootloader über die Klippe schieben.

Gruß, Udo
2885  Forum 2005-2010 (read only) / Deutsch / Re: Problem beim Bootloader brennen on: April 13, 2010, 03:20:53 pm
Gute Frage. Meine Standardantwort ist: nimm ein original Atmel AVR ISP MKII. Ja, der kostet etwas mehr, aber das Ding funktioniert. Und wenn es mal nicht funktioniert, dann kriegt man das auch gut wieder unter Kontrolle. Mit anderen ISPs hatte ich immer Probleme. Mit dem MKII lagen alle Probleme bisher an mir. Ausserdem ist das Teil sehr verzeihend bei Fehlern.

Ansonsten fällt mir dazu nichts ein smiley-sad

Gruß, Udo
2886  Forum 2005-2010 (read only) / Deutsch / Re: PWM Wert on: April 11, 2010, 04:27:50 am
Jein. Timer1 hat 16Bit Auflösung. Die anderen nur 8Bit. Zur Not muß man selber kurz die Libraries patchen.

Gruß, Udo
2887  Forum 2005-2010 (read only) / Deutsch / Re: Probleme mit Displaytech 204B on: April 06, 2010, 04:01:46 pm
Was passiert eigentlich wenn Du es mit (16,4), (16,2) oder (20,2) initialisierst?

Gruß, Udo
2888  Forum 2005-2010 (read only) / Deutsch / Re: Probleme mit Displaytech 204B on: April 04, 2010, 02:41:45 am
OK, und wie sieht das Programm dazu aus?

Gruß, Udo
2889  Forum 2005-2010 (read only) / Deutsch / Re: Probleme mit Displaytech 204B on: April 03, 2010, 06:37:01 am
Hat Dein Display wirklich die gleiche Anschlussbelegung wie im Tutorial? Was steht im Datenblatt?

Sind die Pins für die Library wirklich richtig eingestellt?

Kannst Du ein Bild des Symptoms hochladen?

Gruß, Udo
2890  Forum 2005-2010 (read only) / Deutsch / Re: 4 Relais auf Lochraster on: April 07, 2010, 04:10:42 pm
Ich dachte Du fragst nach Isolationsabstand.  Mit Lochraster hat das dann doch überhaupt nichts zu tun.

2891  Forum 2005-2010 (read only) / Deutsch / Re: 4 Relais auf Lochraster on: April 06, 2010, 03:51:57 pm
Nachtrag: ein Auszug aus der Norm mit konkreten Abständen. Ich nehme mal stark an, daß die Schaltung für Kategorie II ausgelegt wird:

http://www.harkis.harting.com/WebHelp/DGds/WebHelp/DgdsLuft_und_Kriechstrecken.htm

--> 1cm ist schon mal ein guter Anfang smiley

Gruß, Udo
2892  Forum 2005-2010 (read only) / Deutsch / Re: 4 Relais auf Lochraster on: April 06, 2010, 03:47:13 pm
@inside man: Deine Idee ist auch nicht wirklich gut. 1 cm Abstand kriegt man normalerweise problemlos hin. Das reicht in trockenen Umgebungen eigentlich immer.

Dein Vorschlag macht die Sache nur mechnisch instabil. Sicherheit gewinnst Du damit keine.

Gruß, Udo
2893  Forum 2005-2010 (read only) / Deutsch / Re: 4 Relais auf Lochraster on: April 06, 2010, 03:45:29 pm
Und ich dachte Mechanotronik = (Mechanik + Elektronik) / 2. Leichter wird so eine Schaltung kaum noch.

Zum Sicherheitsabstand: soviel wie möglich. Und dazwischen wenn möglich kein Kupfer. Vorzugsweise wird die Niederspannungsseite  / Masse geerdet. Wenn dann doch was schief geht fliegt wenigstens gleich die Sicherung raus.

Wieviel Sicherheitsabstand Du wirklich brauchst hängt von der Frage ab in welchem Umfeld Du schaltest. Auch 230 V ist nicht immer gleich gefährlich. D.h.: bist Du hinter einer Sicherung mit 16A und vieleicht noch einem FI, oder bist Du vor der Hauptsicherung. Das macht schon im Fehlerfall einen gewaltigen Unterschied.

Es macht auch einen Unterschied ob Dein Teil irgendwo in einem Schaltschrank vergraben ist oder ob es z.B. auch von Kleinkindern benutzt werden könnte.

Schau Dir mal das hier an:
http://de.wikipedia.org/wiki/Messkategorie
http://de.wikipedia.org/wiki/Schutzart
http://de.wikipedia.org/wiki/Schutzma%C3%9Fnahme

So wie Du fragst weisst Du jedenfalls nicht wirklich was Du tust --> lass Dein Gerät hinterher auf jeden Fall von einem Fachmann überprüfen. Bei 230V kann es schon passieren, daß man aus seinen Fehlern nichts mehr lernen kann.

Gruß, Udo
2894  Forum 2005-2010 (read only) / Deutsch / Re: Interrupt auslösen auf timer2 ---Wie? on: April 06, 2010, 01:14:31 pm
Nee, am einfachsten kaufst Du Dir einen "grossen" Mega, der hat gleich genug Timer an Board.

http://www.nkcelectronics.com/seeeduino-mega-fully-assembled.html
http://www.atmel.com/dyn/products/product_card_v2.asp?part_id=3633&ListAllAttributes=1

--> 4 16bit Timer.

Gruß, Udo
2895  Forum 2005-2010 (read only) / Deutsch / Re: Interrupt auslösen auf timer2 ---Wie? on: April 06, 2010, 10:02:10 am
Hi Biele,

bloss weil der nicht bis 10 000 Zählen kann heisst das noch lange nicht, dass er nicht auf 10 kHz kommt. Nur hast Du dann eben keine 1Hz Auflösung sondern eben weniger. Das ist alles. Brauchst Du wirklich 1 Hz Frequenzauflösung? Zur Not kann man alles auch mit Interrupts lösen. Bei 10 kHz hat man ja noch 1600 Takte übrig was zu tun.

Gruß, Udo
Pages: 1 ... 191 192 [193] 194 195 ... 232