Forum: Mikrocontroller und Digitale Elektronik C-Code funktioniert nicht


von Oldie (Gast)


Lesenswert?

1
#define F_CPU 1000000UL     /* 1MHz */
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
5
// Defines:
6
#define LED1    (1<<PD5)
7
#define LED2    (1<<PD6)
8
 
9
//Variablen für die Zeit
10
volatile unsigned int millisekunden;
11
volatile unsigned int sekunde;
12
volatile unsigned int minute;
13
volatile unsigned int stunde;
14
 
15
int main(void)
16
{
17
18
// LED-Pins als Ausgang definieren
19
  DDRD |= LED1 | LED2;
20
 
21
  // LED1 einschalten
22
  PORTD |= LED1;
23
  
24
  
25
  // Timer 0 konfigurieren
26
  TCCR0A = (1<<WGM01); // CTC Modus
27
  TCCR0B |= (1<<CS01); // Prescaler 8
28
  // ((1000000/8)/1000) = 125
29
  OCR0A = 125-1;
30
 
31
  // Compare Interrupt erlauben
32
  TIMSK |= (1<<OCIE0A);
33
 
34
  // Global Interrupts aktivieren
35
  sei();
36
 
37
  while(1)
38
  {
39
    if ( minute == 2 )
40
  {
41
  PORTD |= LED2;
42
  
43
  }
44
  }
45
}
46
 
47
/*
48
Der Compare Interrupt Handler 
49
wird aufgerufen, wenn 
50
TCNT0 = OCR0A = 125-1 
51
ist (125 Schritte), d.h. genau alle 1 ms
52
*/
53
ISR (TIMER0_COMPA_vect)
54
{
55
  millisekunden++;
56
  if(millisekunden == 1000)
57
  {
58
    sekunde++;
59
    millisekunden = 0;
60
    if(sekunde == 60)
61
    {
62
      minute++;
63
      sekunde = 0;
64
    }
65
    if(minute == 60)
66
    {
67
      stunde++;
68
      minute = 0;
69
    }
70
    if(stunde == 24)
71
    {
72
      stunde = 0;
73
    }
74
  }
75
}

Hallo, ich habe einige Fragen bezüglich des Codes.
1. Wieso will mit das Atmelstudio dieses Ding nicht bauen?
2. Wie sage ich, dass die LED nicht nur genau am Zeitpunkt minute == 2 
leuchten soll, sondern auch danach? Danke!

: Verschoben durch User
von Oldie (Gast)


Angehängte Dateien:

Lesenswert?

Das sind die ausgegebenen Fehler, anscheinend wurden einige Begriffe 
nicht definiert, was tut man da?

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Oldie schrieb:

> 1. Wieso will mit das Atmelstudio dieses Ding nicht bauen?

soll das ein Rätsel sein? Atmel Studio hat dir doch gesagt, warum es 
„Das Ding“ nicht bauen will. Wie wäres es, wenn du uns das auch 
verrätst?

> 2. Wie sage ich, dass die LED nicht nur genau am Zeitpunkt minute == 2
> leuchten soll, sondern auch danach? Danke!

Warum gehst du davon aus, dass es nicht schon so ist?

vlg
 Timm

von Oldie (Gast)


Lesenswert?

Timm Reinisch schrieb:
> Wie wäres es, wenn du uns das auch
> verrätst?

Screenshot nachgereicht.

Timm Reinisch schrieb:
> Warum gehst du davon aus, dass es nicht schon so ist?

Ist es denn so?
Ich weiß es eben nicht, aber wenn man stur dem Code folgt, so wird bei 
minute == 2 der PORTD aktiviert. Es kann ja sein, dass bei minute == 3 
der PORTD nicht mehr aktiviert ist, da der Zustand minute == 2 nicht 
mehr existent ist

von Oldie (Gast)


Lesenswert?

Laut dem Screenshot versteht er "TCCR0A" usw. nicht, was muss man 
dagegen machen?

von g457 (Gast)


Lesenswert?

avr/io.h reinholen

von Oldie (Gast)


Lesenswert?

Oldie schrieb:
> #include <avr/io.h>

Ist doch drin, oder muss das noch mal extra rein?

von g457 (Gast)


Lesenswert?

..arggs, die iss ja drin.. mmcu adäquat setzen und die richtigen(tm) 
defines nutzen</ingrid>

von Oldie (Gast)


Lesenswert?

g457 schrieb:
> ..arggs, die iss ja drin.. mmcu adäquat setzen und die richtigen(tm)
> defines nutzen</ingrid>

Sorry, könntest du das für einen dummen Idioten wie mich etwas genauer 
erklären und mir genauer sagen, was uich da noch wo hinschreiben muss? 
:)

von Chris L. (kingkernel)


Lesenswert?

Hast du in den Optionen auch den Richtigen Controller ausgewählt?
Stimmen die Register für deinen Controller? Es gibt bei verschiedenen 
Controllern auch teilweise unterschiedliche Registernamen

von Blindgänger (Gast)


Lesenswert?

Frage 1:

Du hast dem AVR Studio nicht mitgeteilt um welcken Controller es sich 
handelt (z.B. ATMega8) oder hast den falschen gewählt.

Frage 2:

LED ist in der while solange Minute==2 immer an, danach aber auch. 
Solange es nichts gibt was das zurücksetzt zumindest.

von Oldie (Gast)


Lesenswert?

Okay ich Idiot habe bei TCCR1B anstatt der 1 immer eine 0 geschrieben 
-.-

Neues Problem: Die LED2 leuchtet nicht, selbst wenn ich millisekunden = 
1 mache... Jemand ne Lösung?

von zong (Gast)


Lesenswert?

>Okay ich Idiot habe bei TCCR1B anstatt der 1 immer eine 0 geschrieben
>-.-

>Neues Problem: Die LED2 leuchtet nicht, selbst wenn ich millisekunden =
>1 mache... Jemand ne Lösung?

Hm, benutzt du jetzt den Timer 1 oder 0 ?
Hast du die Bezeichnungen für den richtigen Typen eingebunden?

von Oldie (Gast)


Lesenswert?

zong schrieb:
> Hm, benutzt du jetzt den Timer 1 oder 0 ?

Timer0... aber nur wenn ich da die 1 hinschreibe, spuckt der überhaupt 
ne hex aus...

von Marek W. (ma_wa)


Lesenswert?

TCCR0B |= (1<<CS11); // Prescaler 8

von Oldie (Gast)


Lesenswert?

Marek Walther schrieb:
> TCCR0B |= (1<<CS11); // Prescaler 8

Da sagt er wieder undeclared...

von Chris L. (kingkernel)


Lesenswert?

Dann ist der Falsche Controller ausgewählt. Welchen benutzt du denn?

von Oldie (Gast)


Lesenswert?

Atmega8

von Chris L. (kingkernel)


Lesenswert?

Ist der in den Projektoptionen auch ausgewählt. Nicht nur in den 
Debugger und Programmeroptionen, auch in den Projektoptionen?

von Oldie (Gast)


Lesenswert?

Chris L. schrieb:
> Ist der in den Projektoptionen auch ausgewählt. Nicht nur in den
> Debugger und Programmeroptionen, auch in den Projektoptionen?

Jop... ich bin am verzweifeln..

von Marek W. (ma_wa)


Lesenswert?

TCCR0 |= (1<<CS01); // Prescaler 8

Sorry, sollte doch Timer 0 sein oder?

: Bearbeitet durch User
von Oldie (Gast)


Lesenswert?

Marek Walther schrieb:
> TCCR0 |= (1<<CS01); // Prescaler 8
>
> Sorry, sollte doch Timer 0 sein oder?

Ja, das wird nun erkannt... du hast einfach das B weggelassen. Soll ich 
das bei den anderen undeklarierten auch machen?

von Oldie (Gast)


Lesenswert?

Oldie schrieb:
> Soll ich
> das bei den anderen undeklarierten auch machen?

Nein das ergibt keinen sinn oder

von Chris L. (kingkernel)


Lesenswert?

Weil deine Definitionen nicht zum mega8 passen. Lass mich raten, du hast 
den code irgendwo kopiert und und willst ihn jetzt auf dem mega8 
verwenden. Der kennt diese Register gar nicht, die heissen da anderst!

Die heissen da TCNT0, TCCR0 und TIMSK. Tu uns allen einen gefallen und 
schau mal ins Datenblatt!

von Timm R. (Firma: privatfrickler.de) (treinisch)


Lesenswert?

Oldie schrieb:
> Marek Walther schrieb:
>> TCCR0 |= (1<<CS01); // Prescaler 8
>>
>> Sorry, sollte doch Timer 0 sein oder?
>
> Ja, das wird nun erkannt... du hast einfach das B weggelassen. Soll ich
> das bei den anderen undeklarierten auch machen?

wie gehst du denn vor? Ich frage mich, woher du bei einem ATMega8 ein 
TCCR0B hattest? Das gibt es gar nicht. Wie bist du denn darauf gekommen?

Datenblatt schauen um die Optionen zu bauen!

vlg
 Timm

von g457 (Gast)


Lesenswert?

>  // Timer 0 konfigurieren
>  TCCR0A = (1<<WGM01); // CTC Modus

Timer0 hat auch keinen CTC-Modus -> Timer1 oder 2 verwenden. Und, ganz 
wichtig, Datenplatt lesen.

von Oldie (Gast)


Angehängte Dateien:

Lesenswert?

Timm Reinisch schrieb:
> wie gehst du denn vor? Ich frage mich, woher du bei einem ATMega8 ein
> TCCR0B hattest?

Gute Frage.
Kann mir jemand helfen? Welche Register muss ich da nehmen? Danke!

von Marek W. (ma_wa)


Lesenswert?

Ich fürchte, du bist mit den Timern durcheinander gekommen.

Timer 0 kennt nur TCCR0
Timer 1 kennt TCCR1A und TCCR1B

Fällt dir da was auf?

Irgendwie hast Du da was vermischt, was man nicht vermischen sollte.

Schau mal in das Datenblatt

oder hier
http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer#CS02.2FCS00_-_Clock_Select

: Bearbeitet durch User
von Marek W. (ma_wa)


Lesenswert?

http://www.tschallener.net/AVR/timer0.pdf
Und Timer 1 ist für dich eventuell der geeignetere Timer.

: Bearbeitet durch User
von Oldie (Gast)


Lesenswert?

Hmm kurze Frage: Ich möchte ja nur, wie ihr es bereits festgestellt 
habt, eine LED nach 2 Stunden/Minuten... leuchten lassen. Wie würdet ihr 
das schreiben?  Geht's auch simpler? Vielleicht mit timer0? Würde mich 
freuen, wenn jemand nen beispiel kurz schreiben könnte!
Danke

von Oldie (Gast)


Lesenswert?

Geht das auch mit timer0?

von Karl H. (kbuchegg)


Lesenswert?

Wenn man weiß was man tut, dann ja.
Wenn man das nicht weiß, dann nein.

Aber wo ist denn das Problem? Nimmst du halt den Timer 1 dafür her.
Das ist doch kein Beinbruch.

Aber mit der Attitüde "Ich kopier mir das alles zusammen ohne es zu 
verstehen" wird das nun mal nichts.

FAQ: Timer
und dazu das Datenblatt deines Prozessors (ATMega8).

Aus der FAQ (beim CTC Modus) findest du das prinzipielle Vorgehen. Und 
das wendest du jetzt eben auf DEINEN µC und das zu DIESEM µC gehörende 
Datenblatt und den Timer 1 an. Timer 1 deswegen, weil das auf dem Mega8 
der einzige Timer ist, der den CTC Modus unterstüzt. Der Timer 0 tut das 
nun mal nicht. Auf einem anderen µC ist das eben anders. Der Timer 0 vom 
Mega 16 hat einen CTC Modus. Der vom Mega8 hat ihn nicht.
Wo ist denn da das Problem? Ist doch vom Prinzip her genau dasselbe nur 
mit anderen Register und/oder Bitnamen wie beim Timer 0. Du musst in 
erster Linie das Prinzip der Vorgehensweise aus der FAQ übernehmen und 
nicht so sehr die konkreten Register/Bitnamen. Die sind beim Mega8 bzw. 
dem Timer 1 dann eben andere. Aber das Prinzip "Fang bei der 
Modustabelle an, hol dir dort die Bitnamen raus, scroll zurück und sieh 
nach in welchem Register das jeweilige Bits sitzt", das ist da wie dort 
genau das gleiche.

Oder kommst du beim Autofahren durcheinander, wenn beim einen Auto der 
Rückwärtsgang in der H-Schaltung rechts unten und beim anderen 
links/oben ist? Du siehst auf das 'Datenblatt', welches in diesem Fall 
auf den Gangknüppel aufgedruckt ist, und orientierst dich daran, wie das 
bei diesem konkreten Automodell geht. Blindes 'Übernehmen' der 
Knüppelstellung hingegen führt dazu, dass du bei dem einen Auto anstatt 
in den 6. Gang dann eben bei Tempo 180 auf der Autobahn den 'R wie 
Ralley'-Gang einlegst und dir das Getriebe um die Ohren fliegt.

: Bearbeitet durch User
von Oldie (Gast)


Lesenswert?

Okay, nun bin ich mir sicher, die richtigen Register anzusprechen, 
leider funktioniert es immer noch nicht :(
1
#define F_CPU 1000000UL     /* 1MHz */
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
5
// Defines:
6
#define LED1    (1<<PD5)
7
#define LED2    (1<<PD6)
8
9
//Variablen für die Zeit
10
volatile unsigned int millisekunden;
11
volatile unsigned int sekunde;
12
volatile unsigned int minute;
13
volatile unsigned int stunde;
14
15
int main(void)
16
{
17
18
  // LED-Pins als Ausgang definieren
19
  DDRD |= LED1 | LED2;
20
  
21
  // LED1 einschalten
22
  PORTD |= LED1;
23
  
24
  
25
  // Timer 1 konfigurieren
26
  TCCR1A = (1<<COM1A0);  // CTC Modus
27
  TCCR1B |= (1<<CS11); // Prescaler 8
28
  // ((1000000/8)/1000) = 125
29
  OCR1A = 125-1;
30
  
31
  // Compare Interrupt erlauben
32
  TIMSK = (1<<OCIE1A);
33
  
34
  // Global Interrupts aktivieren
35
  sei();
36
  
37
  while(1)
38
  {
39
    if ( sekunde == 5 )
40
    {
41
      PORTD |= LED2;
42
      
43
    }
44
  }
45
}
46
47
/*
48
Der Compare Interrupt Handler
49
wird aufgerufen, wenn
50
TCNT0 = OCR0A = 125-1
51
ist (125 Schritte), d.h. genau alle 1 ms
52
*/
53
ISR (TIMER0_COMPA_vect)
54
{
55
  millisekunden++;
56
  if(millisekunden == 1000)
57
  {
58
    sekunde++;
59
    millisekunden = 0;
60
    if(sekunde == 60)
61
    {
62
      minute++;
63
      sekunde = 0;
64
    }
65
    if(minute == 60)
66
    {
67
      stunde++;
68
      minute = 0;
69
    }
70
    if(stunde == 24)
71
    {
72
      stunde = 0;
73
    }
74
  }
75
}

von Hubert G. (hubertg)


Lesenswert?

1
 ISR (TIMER0_COMPA_vect)
Der Wurm wird wohl hier liegen. Datenblatt!!

von Hubert G. (hubertg)


Lesenswert?

1
  TCCR1A = (1<<COM1A0);  // CTC Modus
2
  TCCR1B |= (1<<CS11); // Prescaler 8
Hier ist noch ein Fehler.
Die Led2 schaltest du nie mehr aus.

von Oldie (Gast)


Lesenswert?

Hubert G. schrieb:
> TCCR1A = (1<<COM1A0);  // CTC Modus
>   TCCR1B |= (1<<CS11); // Prescaler 8
> Hier ist noch ein Fehler.
> Die Led2 schaltest du nie mehr aus.

Wo ist denn da der Fehler?
Das hat doch nichts mit dem ausschalten der LED zu tun, oder?

von Glückauf (Gast)


Lesenswert?

Oldie schrieb:
> Hubert G. schrieb:
>> TCCR1A = (1<<COM1A0);  // CTC Modus
>>   TCCR1B |= (1<<CS11); // Prescaler 8
>> Hier ist noch ein Fehler.
>> Die Led2 schaltest du nie mehr aus.
>
> Wo ist denn da der Fehler?
> Das hat doch nichts mit dem ausschalten der LED zu tun, oder?

Der Kommentar zum TCCR1A stimmt nicht.

von engels (Gast)


Lesenswert?

Es passiert mir immer wieder das ich in so einen thread reinlese.
Dabei stelle ich für mich fest das ich als antwortender schon längst die 
EngelsGeduld verloren hätte.

Da gibt man dem TO alles was er braucht und er liest und/oder versteht 
nicht.

Dariwn sagt : Lasst Ihn sterben. :((((((((((

von Hubert G. (hubertg)


Lesenswert?

engels schrieb:
> Dariwn sagt : Lasst Ihn sterben. :((((((((((

Man kann nicht alle sterben lassen. Manchmal ist einem danach etwas fürs 
Leben lassen zu tun.

Oldie schrieb:
> Hubert G. schrieb:
>> TCCR1A = (1<<COM1A0);  // CTC Modus
>>   TCCR1B |= (1<<CS11); // Prescaler 8
>> Hier ist noch ein Fehler.
>> Die Led2 schaltest du nie mehr aus.
>
> Wo ist denn da der Fehler?
> Das hat doch nichts mit dem ausschalten der LED zu tun, oder?

Nein, es hat nichts mit der Led zu tun, das ist etwas zusätzliches.
In der TCCRA Zeile ist der Kommentar falsch.
In der TCCRB Zeile fehlt dafür etwas.
Der Fehler in meiner vorhergehenden Post ist auch noch aktuell.
Das ist aber ein Zeichen das du nur mit Copy und Paste arbeitest und im 
Datenblatt soviel wie nichts gelesen hast.

von Jobst M. (jobstens-de)


Lesenswert?

Hubert G. schrieb:
> Man kann nicht alle sterben lassen.

Es gibt 7.2 Mrd. Menschen ... ein paar gehen ...


Gruß

Jobst

von Oldie (Gast)


Lesenswert?

Jobst M. schrieb:
> Es gibt 7.2 Mrd. Menschen ... ein paar gehen ...

Also mit anderen Worten willst du meinen Tod.
Ziemlich drastisch... Mein Problem ist, dass ich nicht weiß, welches Bit 
im Register ich was zuordnen soll.

von Ralf G. (ralg)


Lesenswert?

Oldie schrieb:
> // Timer 1 konfigurieren
...

Oldie schrieb:
> ISR (TIMER0_COMPA_vect)
...

von Hubert G. (hubertg)


Lesenswert?

Es war sicher nur der Tod als Programmierer gemeint.
1
ISR (TIMER0_COMPA_vect)

Welchen Timer verwendest du?
1
TCCR1A = (1<<COM1A0);  // CTC Modus
Hier steht im Datenblatt nichts von CTC Modus

In meinem Datenblatt Tabelle 39, steht das man für CTC das Bit "WGM12" 
für den Timer1 setzen muss. Das Bit befindet sich im Register "TCCR1B". 
Bei dir vermisse ich das.
1
TCCR1B |= (1<<CS11); // Prescaler 8

Du setzt hier die Led2
1
    if ( sekunde == 5 )
2
    {
3
      PORTD |= LED2;
aber sie geht nie wieder aus, es sei denn du willst das so.

von Zittermann (Gast)


Lesenswert?

Mußt Du Dir mit "C" noch extra Schwierigkeiten aufhalsen?
Grübel....

gez. Zittermann

von Oldie (Gast)


Lesenswert?

1
#define F_CPU 1000000UL     /* 1MHz */
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
5
// Defines:
6
#define LED1    (1<<PD5)
7
#define LED2    (1<<PD6)
8
9
//Variablen für die Zeit
10
volatile unsigned int millisekunden;
11
volatile unsigned int sekunde;
12
volatile unsigned int minute;
13
volatile unsigned int stunde;
14
15
int main(void)
16
{
17
18
  // LED-Pins als Ausgang definieren
19
  DDRD |= LED1 | LED2;
20
  
21
  // LED1 einschalten
22
  PORTD |= LED1;
23
  
24
  
25
   // Timer 1 konfigurieren
26
   TCCR1B = (1<<WGM12);  // CTC Modus
27
  TCCR1B |= (1<<CS11); // Prescaler 8
28
   // ((1000000/8)/1000) = 125
29
   OCR1A = 125-1;
30
  
31
  // Compare Interrupt erlauben
32
 // Compare Interrupt erlauben
33
 TIMSK = (1<<OCIE1A);
34
  
35
  // Global Interrupts aktivieren
36
  sei();
37
  
38
  while(1)
39
  {
40
    if ( sekunde == 5 )
41
    {
42
      PORTD |= LED2;
43
      
44
    }
45
  }
46
}
47
48
/*
49
Der Compare Interrupt Handler
50
wird aufgerufen, wenn
51
TCNT0 = OCR0A = 125-1
52
ist (125 Schritte), d.h. genau alle 1 ms
53
*/
54
ISR(TIMER1_COMPA_vect)
55
{
56
  millisekunden++;
57
  if(millisekunden == 1000)
58
  {
59
    sekunde++;
60
    millisekunden = 0;
61
    if(sekunde == 60)
62
    {
63
      minute++;
64
      sekunde = 0;
65
    }
66
    if(minute == 60)
67
    {
68
      stunde++;
69
      minute = 0;
70
    }
71
    if(stunde == 24)
72
    {
73
      stunde = 0;
74
    }
75
  }
76
}
so steht das im Datenblatt, was ist daran jetzt falsch?

von Christian B. (chbalnuweit)


Lesenswert?

Was funktioniert denn nicht? Gibt es Fehlermeldungen vom Compiler?

von Oldie (Gast)


Lesenswert?

Christian B. schrieb:
> Was funktioniert denn nicht? Gibt es Fehlermeldungen vom Compiler?

OH MEIN F****** GOTT, ES FUNKTIONIERT!!!!
Ich hab es nicht mal compiled, weil ich bereits davon ausging zu 
scheitern!
Oh mein gott, dieses Glücksgefühl, ich bin der HERRSCHER DER WELT!
SO FÜHLT ES SICH AN, WENN MAN SICH MIT EINEM KRIEGER ANLEGT!!!

von herrscher (Gast)


Lesenswert?

Oldie schrieb:
> Christian B. schrieb:
>> Was funktioniert denn nicht? Gibt es Fehlermeldungen vom Compiler?
>
> OH MEIN F****** GOTT, ES FUNKTIONIERT!!!!
> Ich hab es nicht mal compiled, weil ich bereits davon ausging zu
> scheitern!
> Oh mein gott, dieses Glücksgefühl, ich bin der HERRSCHER DER WELT!
> SO FÜHLT ES SICH AN, WENN MAN SICH MIT EINEM KRIEGER ANLEGT!!!

Und das alles ganz ohne Eigenleistung - Du kannst wirklich stolz auf 
dich sein...

von Glückauf (Gast)


Lesenswert?

herrscher schrieb:
> Oldie schrieb:
>> Christian B. schrieb:
>>> Was funktioniert denn nicht? Gibt es Fehlermeldungen vom Compiler?
>>
>> OH MEIN F****** GOTT, ES FUNKTIONIERT!!!!
>> Ich hab es nicht mal compiled, weil ich bereits davon ausging zu
>> scheitern!
>> Oh mein gott, dieses Glücksgefühl, ich bin der HERRSCHER DER WELT!
>> SO FÜHLT ES SICH AN, WENN MAN SICH MIT EINEM KRIEGER ANLEGT!!!
>
> Und das alles ganz ohne Eigenleistung - Du kannst wirklich stolz auf
> dich sein...

Es gibt Kollegen, die so zum Manager werden.

von Hubert G. (hubertg)


Lesenswert?

Oldie schrieb:
> OH MEIN F****** GOTT, ES FUNKTIONIERT!!!!

Jetzt musst du es nur noch schaffen das die Led2 auch wieder mal 
ausgeht.
Oder das die Led1 nur bei geraden Minuten leuchtet.
Überlege mal, da gibt es eine Menge Möglichkeiten was auszuprobieren.

von Karl H. (kbuchegg)


Lesenswert?

herrscher schrieb:

> Und das alles ganz ohne Eigenleistung - Du kannst wirklich stolz auf
> dich sein...


Wollen wir mal hoffen, dass der Code
1
   // Timer 1 konfigurieren
2
   TCCR1B = (1<<WGM12);  // CTC Modus
3
  TCCR1B |= (1<<CS11); // Prescaler 8
aus dem Studium der Modus-Tabelle bzw. Registerbeschreibung aus dem 
Datenblatt resultiert und nicht aus diesen Hinweisen
1
TCCR1A = (1<<COM1A0);  // CTC Modus
2
Hier steht im Datenblatt nichts von CTC Modus
3
In meinem Datenblatt Tabelle 39, steht das man für CTC das Bit "WGM12" für
4
den Timer1 setzen muss. Das Bit befindet sich im Register "TCCR1B". Bei
5
dir vermisse ich das.
6
7
TCCR1B |= (1<<CS11); // Prescaler 8

Es gibt ja auch Leute, die das Datenblatt meiden, wie der Teufel das 
Weihwasser, mit dem Argument "Ich kann kein Englisch". Irgendwie habe 
ich das Gefühl, dass wir es hier mit genau so einem Fall zu tun haben. 
Dabei bräuchte er im Grunde gar nicht viel Englisches lesen (weil eh 
schon alles vorgekaut wurde), sondern nur 'Bildchen schauen' (bzw. 
Tabellen schauen) und die Bezeichnungen von dort im Programm 
zusammenführen.

: Bearbeitet durch User
von Marek W. (ma_wa)


Lesenswert?

Oldie schrieb:
> Christian B. schrieb:
>> Was funktioniert denn nicht? Gibt es Fehlermeldungen vom Compiler?
>
> OH MEIN F****** GOTT, ES FUNKTIONIERT!!!!
> Ich hab es nicht mal compiled, weil ich bereits davon ausging zu
> scheitern!
> Oh mein gott, dieses Glücksgefühl, ich bin der HERRSCHER DER WELT!
> SO FÜHLT ES SICH AN, WENN MAN SICH MIT EINEM KRIEGER ANLEGT!!!

Also ich würde dir jetzt nicht empfehlen dich mit einem Krieger 
anzulegen. Der lässt dir nämlich kein 999 Versuche Zeit, dein 
Skill-Level genügend aufzubauen.

Ansonsten könnte folgende Aussage schnell Realität werden:
> engels (Gast):
> Dariwn sagt : Lasst Ihn sterben. :((((((((((

Trainiere weiter und lese des verdammte Datenblatt. Am besten druckst du 
dir das aus und heftest es ab, dann gab es da einmal noch so bunte 
Klebezettelchen zum organisieren.

So, jetzt auf zur Runde II.
-> Tastaturabfrage interruptgesteuert zur Einstellung des Zeitintervalls 
und zur Abschaltung der LED.

Viel Glück Tiger.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.