Show Posts
Pages: 1 ... 199 200 [201] 202 203 ... 233
3001  Forum 2005-2010 (read only) / Deutsch / Re: Newbie Frage: Bauteile Übersicht/Cheatsheet on: December 28, 2009, 10:51:03 am
Schwierig zu sagen wo man anfangen soll. Also:

http://www.elektronik-kompendium.de/

ist schon mal nicht schlecht. Dann gibt es diese Linksammlung:

http://www.mikrocontroller.net/articles/Linksammlung.

Ansonsten mußt Du Dir eben einen Katalog (Reichelt, Conrad, ...) besorgen und nachschauen was Du willst. Als Anfänger wirst Du wohl oder übel etwas länger brauchen. Elektronik ist auch nicht schwerer zu lernen als Gitarre ... da braucht man auch Jahre bis man es richtig gut kann. Nicht umsonst kann man beides auch studieren smiley-wink
3002  Forum 2005-2010 (read only) / Deutsch / Re: Atmel auf Arduino-Board wechseln on: December 29, 2009, 11:11:01 am
Nachtrag:
- warum ein separater Programmer schlechter ist:
  - belegt ein paar Pins mehr (aber: es gibt Boards die soviele Pins haben, daß das nicht ins Gewicht fällt)
  - kostet zusätzlich Geld
  - die Arduino IDE unterstützt Programmer nicht richtig sauber

- warum er besser ist:
  - man kann den Monitor immer auf der seriellen Schnittstelle lassen und spart sich dadurch lästige Klicks
  - man kann den Speicher (Flash + EEPROM) auch auslesen
  - man ist nicht auf besonders passende Taktfrequenzen angewiesen
  - man kann Fuses nach Gutdünken umprogrammieren
  - wenn man unbedingt will kann man selber Bootloader flashen
3003  Forum 2005-2010 (read only) / Deutsch / Re: Atmel auf Arduino-Board wechseln on: December 29, 2009, 10:54:20 am
Es ist wichtig am Anfang etwas zu haben das funktioniert. Original Arduino muß nicht sein. Seeduino ist besser und Freeduino billgier. Sobald Du etwas Erfahrung hast kannst Du den Bootloader rauskegeln und einen ICSP zum Programmieren nehmen (oder den Arduino dazu umfunktionieren).

Ein direkter Einstieg mit den Controllern geht auch, aber wenn Du soviel Erfahrung hättest, dann würdest Du hier nicht fragen smiley-wink

Der Bootloader wird gebraucht zum Programmieren (falls man keinen Programmer hat). Den kannst Du bei Arduino runterladen. Aber ohne Programmer ist deer nicht hilfreich. Außerdem willst Du als Anfänger etwas haben das schon tut --> fang mit einem fertigen Board an. Das ist eine Fehlerquelle weniger. Und bei Mikrocontrollern gibt es schon genug Fehlerquellen.

Sobald Du mehr Peilung hast kannst Du Dich dann billiger eindecken:
Code:
http://www.futurlec.com/ET-AVR_Stamp_Board.shtml
oder direkt selber Schaltungen bauen.

Als Programmer nehme ich den Origianl Atmel mkii. War zwar vergleichsweise teuer, aber der funktioniert absolut zuverlässig. Bei den anderen hatte ich immer so meine Probleme.

Gruß, Udo

P.S. Sobald Du mehr Erfahrung hast willst Du den Bootloader garantiert nicht mehr haben. Das Ding nervt. Mit einem Programmer ist man definitiv besser bedient sobald die Projekte etwas größer werden.
3004  Forum 2005-2010 (read only) / Deutsch / Re: Größere Schrift auf S65 Shield on: November 15, 2009, 11:48:10 am
Schau mal da http://www.mikrocontroller.net/topic/99701
Der GLCD Fontcreator kann fonts aus Windows / Linux importieren.

Wenn Du auf 24x16 hochgehst, dann koennte es sogar fast schon funktionieren Fonts mit Metafont zu rendern und dann umzurechnen. Ein Programm dafür kenne ich nicht, wäre aber auch nicht so schwer zu schreiben.

Und hier http://websitetips.com/fonts/pixel/ gibt's jede Menge Links auf Pixelfonts.

Schreibe mal auf wie Du dann Dein Ergebnis hinbekommen hast. Bei mir steht das Problem demnächst auch mal an. D.h. ich habe schon ein bischen mit dem Font Creator gespielt, aber immer noch keinen Font gefunden der mir so richtig zusagt.

Gruß, Udo
3005  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 13, 2009, 05:24:35 am
Na dann weiter viel Spaß. Erkenntnis: Finger weg von Interrupts wenn man die nicht wirklich braucht smiley

Zu der Spannungsspitze: zu welchem Zeitpunkt wurde abgeschaltet? Und ist das der einzige Akku der dieses Verhalten zeigt?
3006  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 11, 2009, 11:50:37 am
Einfach halten ist immer eine gute Idee. Du bekommst mit dem Ansatz etwas Jitter weil die digitalRead Kommandos nicht besonders schnell ausgeführt werden. Kann sein, daß das kein Problem ist, ansonsten kann man die Ports auch direkt manipulieren.

Aber erst mal schauen ob das nicht sowieso schon ausreicht.

Gruß, Udo
3007  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 10, 2009, 12:31:06 pm
Nachtrag: delayMicroseconds sperrt während es läuft alle Interrupts. D.h. für die 5ms kann kein Interrupt auftreten.  Da Du aber asynchron auf der Flanke triggerst wird jeder Interrupt der während der 5ms aufläuft direkt hinterher abgearbeitet. So wie das also jetzt kodiert ist hättest Du die Interruptbearbeitung auch gleich weglassen können.

Der Code in wiring.c ist

Code:
void delayMicroseconds(unsigned int us)
{
      uint8_t oldSREG;

      // calling avrlib's delay_us() function with low values (e.g. 1 or
      // 2 microseconds) gives delays longer than desired.
      //delay_us(us);

#if F_CPU >= 16000000L
      // for the 16 MHz clock on most Arduino boards

      // for a one-microsecond delay, simply return.  the overhead
      // of the function call yields a delay of approximately 1 1/8 us.
      if (--us == 0)
            return;

      // the following loop takes a quarter of a microsecond (4 cycles)
      // per iteration, so execute it four times for each microsecond of
      // delay requested.
      us <<= 2;

      // account for the time taken in the preceeding commands.
      us -= 2;
#else
      // for the 8 MHz internal clock on the ATmega168

      // for a one- or two-microsecond delay, simply return.  the overhead of
      // the function calls takes more than two microseconds.  can't just
      // subtract two, since us is unsigned; we'd overflow.
      if (--us == 0)
            return;
      if (--us == 0)
            return;

      // the following loop takes half of a microsecond (4 cycles)
      // per iteration, so execute it twice for each microsecond of
      // delay requested.
      us <<= 1;
    
      // partially compensate for the time taken by the preceeding commands.
      // we can't subtract any more than this or we'd overflow w/ small delays.
      us--;
#endif

      // disable interrupts, otherwise the timer 0 overflow interrupt that
      // tracks milliseconds will make us delay longer than we want.
      oldSREG = SREG;
      cli();

      // busy wait
      __asm__ __volatile__ (
            "1: sbiw %0,1" "\n\t" // 2 cycles
            "brne 1b" : "=w" (us) : "0" (us) // 2 cycles
      );

      // reenable interrupts.
      SREG = oldSREG;
}

Was Du brauchst wäre aber wohl eher

Code:
void delayMicroseconds(unsigned int us)
{
//      uint8_t oldSREG;

      // calling avrlib's delay_us() function with low values (e.g. 1 or
      // 2 microseconds) gives delays longer than desired.
      //delay_us(us);

#if F_CPU >= 16000000L
      // for the 16 MHz clock on most Arduino boards

      // for a one-microsecond delay, simply return.  the overhead
      // of the function call yields a delay of approximately 1 1/8 us.
      if (--us == 0)
            return;

      // the following loop takes a quarter of a microsecond (4 cycles)
      // per iteration, so execute it four times for each microsecond of
      // delay requested.
      us <<= 2;

      // account for the time taken in the preceeding commands.
      us -= 2;
#else
      // for the 8 MHz internal clock on the ATmega168

      // for a one- or two-microsecond delay, simply return.  the overhead of
      // the function calls takes more than two microseconds.  can't just
      // subtract two, since us is unsigned; we'd overflow.
      if (--us == 0)
            return;
      if (--us == 0)
            return;

      // the following loop takes half of a microsecond (4 cycles)
      // per iteration, so execute it twice for each microsecond of
      // delay requested.
      us <<= 1;
    
      // partially compensate for the time taken by the preceeding commands.
      // we can't subtract any more than this or we'd overflow w/ small delays.
      us--;
#endif

      // disable interrupts, otherwise the timer 0 overflow interrupt that
      // tracks milliseconds will make us delay longer than we want.
//      oldSREG = SREG;
//      cli();

      // busy wait
      __asm__ __volatile__ (
            "1: sbiw %0,1" "\n\t" // 2 cycles
            "brne 1b" : "=w" (us) : "0" (us) // 2 cycles
      );

      // reenable interrupts.
//      SREG = oldSREG;
}

Also zusätzlich dazu was ich vorher schon gesagt habe.

Gruß, Udo
3008  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 10, 2009, 12:21:44 pm
Hmm, so war das nicht ganz gemeint. Die Interrupts für die Zeit des attachInterrupt zu sperren bringt nichts.  Du musst sperren bis der andere Interrupt dran war, also so:

Code:

cbi(TIMSK, TOIE0);
attachInterrupt(0, Messung, FALLING);

delayMicroseconds(5000); // 5 mS verzögern

while (DEBUG2 == 0) {
  // auf Interrupt warten
}

detachInterrupt(0); // Interrupt abschalten
sbi(TIMSK, TOIE0);
3009  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 09, 2009, 03:35:46 pm
Das verstehe ich jetzt nicht ganz. Willst Du sagen, daß Du glaubst der IRQ ist schuld oder nimmst Du an etwas anderes ist schuld?

Kannst Du vieleicht mal die Codestelle ins Forum stellen?
3010  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 09, 2009, 02:56:42 pm
Hmm, vieleicht ist es dann gar nicht der Interrupt. Als erstes muß auf jeden Fall geklärt werden wo das Problem herkommt. Ich tippe zwar immer noch auf den Interrupt, aber so langsam wird die Ferndiagnose schwierig.

Gruß, Udo
3011  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 08, 2009, 03:56:53 pm
Na dann bist Du doch schon tief genug in den Details drin smiley Ist ja nicht ganz ohne den Controller zu tauschen. Und die Sache mit den Makros hast Du doch auch rausgekriegt. Ich nehme übrigens einen 644. Viele Pins und schön viel Speicher und passt vor allem in die Mega 32 Boards die man überall günstig kriegt. Die sind viel besser zum Basteln als die "normalen" Arduino Boards smiley

Bin ja mal gespannt ob das jetzt bei Dir hinhaut.
3012  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 08, 2009, 02:07:25 pm
Ah Mist,

ich habe einfach in wiring.c nachgeschaut und dort eben gesehen, daß dort Timer 0 mit

Code:
     // enable timer 0 overflow interrupt
#if defined(__AVR_ATmega8__)
      sbi(TIMSK, TOIE0);
#else
      sbi(TIMSK0, TOIE0);
#endif

aktiviert wird. Dumm nur, daß sbi / cbi in wiring_private.h definiert sind. Das hatte ich übersehen. Also dann wie folgt: Du inkludierst einfach so:

Code:
#include <avr/io.h>
#include <avr/interrupt.h>

und schreibst noch

Code:
#ifndef cbi
#define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
#endif
#ifndef sbi
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
#endif

Dann hast Du auch die Makros. Oder Du inkludierst gleich wiring_private.h.

Allerdings stimme ich Dir völlig zu, daß das nicht gerade leicht durchschaubar ist. Am einfachsten wäre es PWM kurz abzuschalten.

Andererseits: Du wolltest ja was lernen. Woher ich mein Wissen habe? Naja, ich baue im Moment eine "Präzisionsstoppuhr" --> die Sorte Probleme habe ich dauernd. Deshalb habe ich (1) das Datenblatt durchgelesen und zwar alles was zu den Timern drinsteht und (2) die ganzen Arduino Libs durchgeschaut die hierzu relevant sind, also alles was wiring* oder WInterrupts* heißt. Die Libs stehen bei mir in   "arduino-0017/hardware/cores/arduino".

Da ich sowieso "command line Arduino" - also ohne IDE - nehme habe ich auch relativ wenig Hemmungen in den Libs rumzupfuschen. Der Lerneffekt ist enorm smiley

Ist zugegeben am Anfang etwas aufwendig, aber wenn man das einmal kapiert hat geht die ganze Timerprogrammierung wesentlich leichter von der Hand.

Gruß, Udo

P.S. was ich gerade auf die harte Tour lerne: der Arduino ist nicht wirklich geeignet für präzise Zeiterfassung. Die Quarze sind das Problem. 16 MHz Quarze scheinen gewaltig zu streuen. Ich habe bis zu 203 Microsekunden (also 203 ppm) relative Abweichung selbst wenn alle Interrupts aus sind smiley-sad
3013  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 07, 2009, 03:37:40 pm
OK, dann ist die Sache klar. Im Datenblatt steht in Abschnitt 12:

The INT0 and INT1 interrupts can be triggered by a falling or rising edge or a low level. This is
set up as indicated in the specification for the External Interrupt Control Register A – EICRA.
When the INT0 or INT1 interrupts are enabled and are configured as level triggered, the inter-
rupts will trigger as long as the pin is held low. Note that recognition of falling or rising edge
interrupts on INT0 or INT1 requires the presence of an I/O clock, described in ”Clock Systems
and their Distribution” on page 26. Low level interrupt on INT0 and INT1 is detected asynchro-
nously. This implies that this interrupt can be used for waking the part also from sleep modes
other than Idle mode. The I/O clock is halted in all sleep modes except Idle mode.

Du hast die Interrupts auf die Flanke gesetzt. Also kommt die Verzögerung dadurch, daß die Flanke auftritt während ein anderer Interrupt gerade aktiv ist. Typischerweise wird das wohl der Timerinterrupt sein.

Wenn Du den Timer0 anhältst bevor Du int0 aktivierst sollte das Problem weggehen. Also

Code:
cbi(TIMSK0, TOIE0);

vor der Messung und

Code:
sbi(TIMSK0, TOIE0);

hinterher.

Natürlich darfst Du Dich dann nicht mehr auf Timer0 verlassen. D.h. Delay funktioniert solange nicht (delayMicroseconds aber schon).

Gruß, Udo

P.S. Sag bescheid ob's das wirklich war




3014  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 07, 2009, 12:37:53 pm
Ich tippe auf den Akku. Du bist 5ms hinter der fallenden Flanke der PWM wenn ich Dich richtig verstehe. Und der Akku wird von Dir vor und während der Messung nicht belastet, oder?

Wenn dem so ist, dann würde ich darauf tippen, daß der Akku sich schlicht und ergreifend nicht so verhält wie Du das erwartest. Ein Akku ist kein Kondensator der sich in 5ms garantiert beruhigt. Wenn Du der Sache richtig auf den Grund gehen willst, dann hilft nur ein Speicheroszi.

Schau erst einmal das Verhalten an ohne PWM. D.h. Ladespannung für 1 Minute anlegen und dann 1 Minute messen. Einmal mit und einmal ohne Last. Danach weißt Du wo das Problem liegt smiley-wink

Da Deine Frequenzen mit 500 Hz aber sehr niedrig sind würde ein Arduino als Speicheroszi schon völlig ausreichen. Oder was anderes aus der untersten Preisklasse:

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1223639021

http://www.youritronics.com/arduino-oscilloscope/
3015  Forum 2005-2010 (read only) / Deutsch / Re: attach/detachInterrupt Problem on: December 06, 2009, 10:34:02 am
Noch ein Nachtrag. Auf was für eine Frequenz ist Deine PWM eingestellt? Der ADC braucht ja relativ lange um zu konvertieren. Wenn die PWM zu schnell ist, dann ist sowieso klar, daß Du immer Probleme bekommen wirst.

Gruß, Udo
Pages: 1 ... 199 200 [201] 202 203 ... 233