mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interupt mit Timer


Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Tag,

Würde folgender Code mit einem 8 MHz Quarz funktionieren? das ganze 
solle eine Uhr werden:

#include <avr/interrupt.h>

#define fosc 80000000  //8 MHz Quarz zwischen XTAL 1 und XTAL 2

void init_Timer1(void) {

OCR1A = 0xBB7F;       // TOP = 47999

  TIMSK |= (1<<OCIE1A); // CTC-Interrupt zulassen
  TCCR1B = (1<<CS12) | (1<<WGM12); // Mode 4 (CTC; OCR), Timer starten
PSC = 256


}


ISR(TIMER1_COMPA_vect) {

  // Uhrencode
}


int main( void ) {

  init_Timer1();

  sei();

  while(1) {}

  return 0;
}


Grüße
Sebastian H

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> Guten Tag,
>
> Würde folgender Code mit einem 8 MHz Quarz funktionieren?

Definiere 'funktionieren'

Wenn du damit 'läuft grundsätzlich' meinst:
Sieht nicht schlecht aus. Was sagt denn dein Simulator, buw der
Prozessor dazu?

Wenn du damit 'kriege ich damit eine exakte Uhr' meinst.
Nein, wahrscheinlich nicht.
> #define fosc 80000000  //8 MHz Quarz zwischen XTAL 1 und XTAL 2
Dein Quarz schwingt nicht mit exakt 8000000 Hz.

http://www.mikrocontroller.net/articles/AVR_-_Die_...

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hm k :)

Also mit funktionieren meine ich ob der das mach was er soll. Nämlich 
jede Sekunde einen Interupt auslösen damit eine Uhr hochzählt tut er da? 
:)

Das sie nicht sonderlich genau ist ist nich so schlimm. Reicht mir schon 
wenn se nach 1ner Stunde nicht 1 Minute falsch geht :)

Simulator läuft leider unter Vista nicht. Deswegen frage ich hier.

Auf Prozessor teste ich es dann noch :) Wollte aber erst wissen ob es 
funktionieren kann.

Grüße
Sebastian H.

Autor: Martin L. (melvin_the_moose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> #define fosc 80000000  //8 MHz Quarz zwischen XTAL 1 und XTAL 2
-> Ist da nicht eine 0 zuviel? (Für den Fall, daß fosc noch irgendwo 
verwendet wird...).

> OCR1A = 0xBB7F;       // TOP = 47999
>   TCCR1B = (1<<CS12) | (1<<WGM12); // Mode 4 (CTC; OCR), Timer starten
> PSC = 256

Prescaler = 256, TOP = 47999 ergibt bei 8MHz einen Tick von 1,535968 
Sek.(oder hab' ich mich verrechnet?)?!

Gruß

Martin

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit der Frequenz hast du recht

Da ist eine null zu viel :)


Wie kann man das denn ausrechnen das der nen Tick bei einer Sekunde 
macht??
Also welche formel gibt es dafür sowas allgemein auszurechnen?

Ist die Formel Zufällig:

Qaruzfrequenz / Prescaler (256) = TOP (Pro Sekunde???)

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wäre dann der TOP für einen 8 MHz Quarz bei eine Prescaler von 256
31250? also 7A12 ??

Damit jede sekunde ein tick ist?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> Wäre dann der TOP für einen 8 MHz Quarz bei eine Prescaler von 256
> 31250? also 7A12 ??

Fast: 31250 - 1

Frage: Kriegst du eigentlich Sonderpunkte, wenn du den Top Wert
als Hex Zahl angibst? Wenn auf deinem Taschenrechner 8000000 / 256
31250 ergibt, dann schreib das doch auch so hin. Angenehmer
Nebeneffekt: Du brauchst dann auch keinen Kommentar, der dem
Leser die Dezimalzahl dazu angibt.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok :)

Finde es als Hex übersichtlicher irgendwie :)

ok also ist die Formel, damit jede Sekunde in Tick ist folgende:

Qarzfrequenz / Prescaler = Top

Und das ganze noch -1


oder?

Autor: Martin L. (melvin_the_moose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte erst das Manual lesen und dann schreiben sollen:

Die Tickrate ist lt. ATMEL (Bsp.: ATMega8):
f_OCR1A=f_CLK/(2*Prescaler*(1+OCR1A))

In meiner Rechnung hatte ich den Faktor 2 und das +1 unterschlagen...

Für 1 Hz also:
OCR1A=(8MHz/(2*256*1Hz))-1=15624

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah ok :)

danke schön

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin L. wrote:
> Ich hätte erst das Manual lesen und dann schreiben sollen:
>
> Die Tickrate ist lt. ATMEL (Bsp.: ATMega8):
> f_OCR1A=f_CLK/(2*Prescaler*(1+OCR1A))
>
> In meiner Rechnung hatte ich den Faktor 2 und das +1 unterschlagen...
>
> Für 1 Hz also:
> OCR1A=(8MHz/(2*256*1Hz))-1=15624

Nein, die Formel gibt die Frequenz für einen OC-Pin an. Der toggelt bei 
jedem Timer-Event, daher der Faktor 2. Die Interrupt-Rate ist die Formel 
ohne die 2.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie isn nun die richtige formel?????

So???

OCR1A=(8MHz/(256*1Hz))-1=31249

Autor: Martin L. (melvin_the_moose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Nein, die Formel gibt die Frequenz für einen OC-Pin an. Der toggelt bei
> jedem Timer-Event, daher der Faktor 2. Die Interrupt-Rate ist die Formel
> ohne die 2.
Yo, Danke/Pardon

>So???
>OCR1A=(8MHz/(256*1Hz))-1=31249
Jaaa :-)

Autor: Sebastian H. (sebimax)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die uhr braucht jetzt ewig bis sie anläuft und hängt zwischendrin auch?

Warum das denn?

Und sie läuft viel zu schnell

1 Minute von der BinärUhr entsprechen 47 Sekunden Real.

Wie kann ich das noch optimieren?

Autor: Martin L. (melvin_the_moose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehe ich das richtig, in der ISR läuft eine for-ever-Schleife?:
>ISR(TIMER1_COMPA_vect) //16 Bit Timer
>{
>  [...]
>  //Uhr hochz�hlen lassen
>
>  for (;;)
>   {
>    _delay_ms(50);

Ein "break" konnte ich nicht finden...
Das dürfte einen Stacküberlauf wg. verschachtelter Interrupts ergeben.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochnmal auf deutsch bitte ??? Soll ich die forever schleife löschen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> ok :)
>
> Finde es als Hex übersichtlicher irgendwie :)

Ehrlich?
Dann solltest du dich mal fragen, warum du den dezimalen
Wert als Kommentar noch dazuschreiben musst.


Was soll den der Unsinn mit der for Schleife in der ISR?

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah cool :)

das delay muss auch noch weg... is noch vom alten code


Werd ich mal machen und dann nochmal schreiben :)

schreib das nur dazu für Leute die meine Codes laden und eben nicht 
sofort erkennen was das ist :)

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, war mir fast klar, dass du deinen kompletten alten Code in die 
Interruptroutine verschieben würdest. Da fehlen bei dir ja noch einige 
C-Grundlagen. Versuche z.B. mal den Unterschied zwischen globalen und 
lokalen Variablen rauszufinden (und "static" ist in diesem Zusammenhang 
auch sehr interessant). Im Übrigen ist die Ausgabe unnötig 
verkompliziert.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was stimmt denn mit den ausgabe befehlen nicht??

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> Nochnmal auf deutsch bitte ??? Soll ich die forever schleife löschen?

Die ISR Funktion wird (mehr oder weniger) exakt genau 1 mal jede
Sekunde aufgerufen. Du brauchst da keine Schleifen oder delays
oder sonstigen Müll. Einfach die Zeit hochzählen und fertig.

Die eigentliche Ausgabe bzw. Abfrage der Eingänge verfrachtest
du in die Hauptschleife in main(). Dort bleibt noch genügend
Zeit dafür übrig, die Anzeige auf den neuesten Stand zu bringen
volatile unsigned char s1=0;
volatile unsigned char s2=0;
volatile unsigned char m1=0;
volatile unsigned char m2=0;
volatile unsigned char h1=0;
volatile unsigned char h2=0;

ISR(TIMER1_COMPA_vect) //16 Bit Timer
{
  s1 = s1 + 1;
  if (s1 > 9)
  {
    s1 = 0;
    s2 = s2 + 1;
    if (s2 == 6)
    {
      s2 = 0;
      m1 = m1 + 1;

      if (m1 > 9)
      {
        m1 = 0;
        m2 = m2 + 1;

        if (m2 == 6)
        {
          m2 = 0;
          h1 = h1 + 1;

          if ((h1 > 9) && (h2 < 2))
          {
            h1 = 0;
            h2 = h2 + 1;

            if ((h1 == 4) && (h2 == 2))
            {
              h2 = 0;
              h1 = 0;
            }
          }
        }
      }
    }
  }
}

int main()
{
  ....


  while( 1 ) {
    // hier die Ausgabe von den globalen Variablen s1, s2, etc

    // sowie die Behandlung der Tastendrücke
  }
}

Persönlich finde ich die Unterteilung der Sekunden in Zehenr
und Einer nicht sehr glücklich. Das verkompliziert das Hochzählen
einfach nur kräftig, ohne dass es bei der Ausgabe viel bringt.
Eine 2 stellige Zahl in Zehner und Einer zu unterteilen ist trivial:

Einer  = Zahl % 10
Zehner = Zahl / 10

Die Division kostet zwar Rechenzeit, aber dein µC fadisiert sich
sowieso, mit dieser Aufgabe. Und vernünfitge Variablennamen haben
auch noch nie geschadet.
volatile unsigned char Sekunden;
volatile unsigned char Minuten;
volatile unsigned char Stunden;

ISR(TIMER1_COMPA_vect) //16 Bit Timer
{
  Sekunden++;

  if( Sekunden == 60 ) {
    Sekunden = 0;
    Minuten++;

    if( Minuten == 60 ) {
      Minuten = 0;
      Stunden++;

      if( Stunden == 24 ) {
        Stunden = 0;
      }
    }
  }
}

int main()
{
   ...

   while( 1 ) {

     PORTA = ( Sekunden % 10 ) << 4 ) | ( Sekunden / 10 );
     PORTB = ( Minuten % 10 )  << 4 ) | ( Minuten / 10 );
     PORTC = ( Stunden % 10 )  << 4 ) | ( Stunden / 10 );

     ...
   }
}

Sieht doch gleich viel besser aus :-)

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mache aus
  PORTA &= 0x00;
  PORTA |= (s2 << 4) | s1;
einfach
  PORTA = (s2 << 4) | s1;

Autor: Martin L. (melvin_the_moose)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Ernst wrote:
> Versuche z.B. mal den Unterschied zwischen globalen und
> lokalen Variablen rauszufinden.

@ Sebastian:
Wenn Du das Ding nicht noch einmal ganz neu stricken, sondern die ISR 
"retten" möchtest: Die Variablen (s1 etc.) müssen dann entweder "static" 
deklariert werden, weil sie sonst am Blockende ihre Gültigkeit 
verlieren, ODER global definiert werden.
Wenn sie static in der ISR sind, kann nirgendwo sonst im Programm darauf 
zugegriffen werden...

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Karl heinz Buchegger:
> PORTA = ( Sekunden % 10 ) << 4 ) | ( Sekunden / 10 );

Ne, umgekehrt. ;-)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
int main()
{
   unsigned char SekundenAlt  = 255;

   ...

   while( 1 ) {
     if ( SekundenAlt != Sekunden )
     {
        SekundenAlt = Sekunden;
        PORTA = ( Sekunden % 10 ) << 4 ) | ( Sekunden / 10 );
        PORTB = ( Minuten % 10 )  << 4 ) | ( Minuten / 10 );
        PORTC = ( Stunden % 10 )  << 4 ) | ( Stunden / 10 );
     }
     ...
   }
}

So hat der Atmel noch weniger zutun...

Autor: Sebastian H. (sebimax)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
jetzt funktioniert gar naix mehr :(

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan Ernst wrote:
> @ Karl heinz Buchegger:
>> PORTA = ( Sekunden % 10 ) << 4 ) | ( Sekunden / 10 );
>
> Ne, umgekehrt. ;-)

Ähm, ja.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Lipinsky wrote:

> So hat der Atmel noch weniger zutun...

Der kommt doch um vor Langeweile! :-)

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Matthias Lipinsky:

> So hat der Atmel noch weniger zutun...

Sorry, aber das stimmt so nicht ganz. Er hat in beiden Fällen gleich 
viel zu tun, deine Schleife wird nur einfach (meistens) schneller und 
damit häufiger abgearbeitet. ;-)

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Help es funktioniert gar nix mehr (quellcode in meinem Letzten post)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann stell den Prescaler mal kurzzeitig auf 1, schnapp dir den
Simulator im AVR Studio und simuliere mal durch. Einen
Breakpoint in die ISR und dann mittels Einzelschritten durchsteppen.

(Wenn du schon nicht die Anregung zur Vereinfachung des COdes
annehmen willst).

Ausserdem: Was funktioniert denn nicht?

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde sehr gerne das ganze simulieren. Leider läuft der Simulator 
unter Vista nicht :(

Naja es passiert einfach gar nichts mehr :)

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Sebastian
Jetzt haben verschiedene Leute stundenlang dein Problem geloest.
Dein letzter Quellcode zeigt aber, dass Du immer noch Defizite
in den Grundlagen hast.
Vielleicht wuerde das Durcharbeiten des Tutorials mehr bringen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> Ich würde sehr gerne das ganze simulieren. Leider läuft der Simulator
> unter Vista nicht :(

Da musst du dir was einfallen lassen.
Das ist so nämlich auf Dauer kein Zustand.
VMWare mit einem 2-ten WinXP aufsetzen.

Mein Vista ist zwar schon lange von der Maschine runter (ca 1 Jahr)
aber das damalige AVR Studio hatte keine Probleme mit der
Simulation (ausser den üblichen Problemen, die aber nichts mit
Vista zu tun hatten)

> Naja es passiert einfach gar nichts mehr :)

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay werd ich mal machen. Hab glaub ich noch irgendwo ne Version von 
VMWare :)

Würde mich trotzdem freuen, wenn ihr mir offensichtliche fehler schicken 
könntet (learning by doing)

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>(learning by doing)

du meinst:

TRY AND ERROR

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> Okay werd ich mal machen. Hab glaub ich noch irgendwo ne Version von
> VMWare :)
>
> Würde mich trotzdem freuen, wenn ihr mir offensichtliche fehler schicken
> könntet (learning by doing)

Laut Simulator (eingestellt auf Mega16) wird die ISR aufgerufen.
(Prescaler hab ich mal auf 1 gesetzt).
Innerhalb der ISR werden die Variablen auch hochgezählt und die
Ausgabe (zumindest am PortA) wird ebenfalls gemacht.

Ich könnte das ganze jetzt nich in einen realen Mega16 brennen,
bin mir aber sicher, dass sich dort das gleiche Bild zeigen wird.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
komisch

Danke fürs simulieren :)

Dann sollte es auf meinem Prozzesor eigentlich auch laufen ...

Vielleicht is ja mein 16 Mhz Quarz nicht aktiviert? oder Kaputt?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Vielleicht is ja mein 16 Mhz Quarz nicht aktiviert? oder Kaputt?


Aus diesem GRund habe ich zu Testzwecken anfangs immer sowas drin: Das 
ist mit nem Oszi nachprüfbar.
void main ( void )
{
  ...

  while (1)
  {
    // zum Testen
    PORTD ^= 0x80;     // irgendein freier Ausgangspin
    ...

  }
}

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab leider kein Oszi sonst würd ich das direkt übernehmen :)

muss man den die XTAL extra activieren ?? In den fusebits oder so??

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann schreib die Zeile in die ISR (Pin aber als Ausgang schalten), dann 
siehst du wenigstens, ob der in die ISR reinläuft.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
tut er :)

eine lampe leuchtet (nach ca. 1 Minute)

Aber es passiert dann nie wieder was so als ob der Timer ewig lange 
braucht

Ich werde mal den Prescaler auf 1 stellen und dann nochmal auf den 
ATMega brennen.

muss man den die XTAL extra activieren ?? In den fusebits oder so??

Mal schauen was dann passiert

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> Hab leider kein Oszi sonst würd ich das direkt übernehmen :)

Das siehst du doch, ob die LED angeht oder nicht.
#include <avr/io.h>

int main()
{
  unsigned char i;

  DDRD = 0xFF;

  while( 1 ) {
    PORTD = 0xAA;
  }
}

Am PortD muss jede 2.te Led brennen.
Dann mal den Gegentest mit

   PORTD = 0x55;

Jetzt muessen jeweils die anderen LED brennen.

Dann weist du zumindest mal, ob der Prozessor läuft.
Dann noch einen Test zur Geschwindigkeit
#define F_CPU 16000000

#include <avr/io.h>
#include <util/delay.h>

int main()
{
  unsigned char i;

  DDRD = 0xFF;

  while( 1 ) {

    PORTD = 0x00;
    for( i = 0; i < 100; i++ )
      _delay_ms( 10 );

    PORTD = 0xFF;
    for( i = 0; i < 100; i++ )
      _delay_ms( 10 );
  }
}

Die LED muessen im Sekundentakt an und aus gehen. Damit wäre
dann auch abgeklärt, ob die 16Mhz auch wirklich da sind.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich werde morgen mal die beiden Programme draufbrennen und testen.

Ich werde euch dann die ergebnisse hier posten.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach ja noch was:


ich habe ja in meinem code:
#define fosc 16000000  //16 MHz Quarz zwischen XTAL 1 und XTAL 2
stehen.


Ist da vielleicht der Fehler.
In einem Programm für eine Textdisplay steht für die CPU frequenz 
folgendes:
#define F_CPU 16000000UL     //Prozessor Frequenz in Hz
(das Display Programm funktioniert)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> Ach ja noch was:
>
>
> ich habe ja in meinem code:
> #define fosc 16000000  //16 MHz Quarz zwischen XTAL 1 und XTAL 2
> stehen.
>
>
> Ist da vielleicht der Fehler.
> In einem Programm für eine Textdisplay steht für die CPU frequenz
> folgendes:
> #define F_CPU 16000000UL     //Prozessor Frequenz in Hz
> (das Display Programm funktioniert)

In deinem Code gibt es nichts, was F_CPU (oder fosc) benutzen
würde. Von daher ist es gehupft wie gesprungen. Dein Program
würde sich nicht verändern, selbst wenn du fosc rausschmeissen
würdest.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso ok


ich finds nur komisch das es bei dir in der Simulation funktioniert hat, 
es aber auf dem Chip nicht funktioniert.


Andere Programme laufen ja auch.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sebastian H. wrote:
> Achso ok
>
>
> ich finds nur komisch das es bei dir in der Simulation funktioniert hat,
> es aber auf dem Chip nicht funktioniert.
>
>
> Andere Programme laufen ja auch.

Brenn doch mal das 2.te Programm drauf. Damit siehst du nach,
ob die 16Mhz auch wirklich anliegen.
Entweder die Led gehen alle 1 Sekunde an und aus, oder die brauchen
dazu viel länger. Ist ein ganz simpler Test.

Wenn die LED erst nach jeweils 16 Sekunden umschalten, dann läuft
kein Quarz, sondern der interne Taktgeber mit 1Mhz.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jo werd ich wie gesagt morgen machen und dann posten (hab den Programmer 
jetzt schon aufgeräumt :)


Danke das ihr soviel Zeit investiert habt :)


Ich meld mich dann mal morgen wieder, wenn ich das 2. Programm 
draufgebrannt habe mit den ergebnissen :)


Noch so als Frage:
Muss man den Externen Quarz in den Fusebits aktivieren??

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay ich hab das ganze gerade mal draufgebrannt. Die LED geht alle 16 
Sekunden an und nach weiteren 16 Sekunden wieder aus.

Also stimmt wohl etwas mit dem Quarz nicht oder?

Er ist folgendermaßen angeschlossen:

XTAL 1----..----------||------------------------GND
          ||Quarz    Kondensatoren 22pf
XTAL 2----..----------||------------------------GND



Muss man den Quarz irgendwie in den Fuses aktivieren??

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Muss man den Quarz irgendwie in den Fuses aktivieren??

Ja. normalerweise muss man das tun.

Das ist meist die letzte Fuse, ganz unten.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ok wird gleich getestet

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super das wars danke euch vielmals

Jetzt kann ich mich wieder dem Programm zuwenden.


Wird noch etwas dauer. Ich denke ab Mittwoch kann ich mich wieder melden 
(schreibe morgen eine Schlaufgabe in Deutsch.


Danke derweil ich meld mich wieder.

Autor: Sebastian H. (sebimax)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So Programm läuft und Uhr ist nach 1er Stunde noch sehr genau (hab se im 
moment sehr experimentell gebaut).


Werde se mal bis ende der Woche bauen (wenn die bestelleten LEDs da 
sind)

und mich dann nochmal melden

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.