BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- C VERZWEIFELT microcontroller-uhr (http://www.black-board.net/thread.php?threadid=23151)


Geschrieben von rhamirez am 15.01.2008 um 19:12:

Achtung VERZWEIFELT microcontroller-uhr

Hallo leute sitze grade an einem schulprojekt,(seid nun montag morgens) und es muss freitag mittag fertig sein....

mein problem, habe für den controller ein programm geschrieben, genauer gesagt es soll eine uhr werden.

habe ein program, welches unabhängig vom Takt durch einstellungsparameter eine relativ genaue sekunde ausgibt, problem nur, es läuft nicht.

sollte jemand hier ahnung davon haben, bitte ich um dringende hilfe mein zeugniss ist in gefahr und der betreuende lehrer krank im bett=(


habe das program im anhang.

noch paar zusätzliche informationenen:

es handelt sich über einen ATTiny2313, der die uhrzeit binär ausgeben soll, der einfacheit halber soll er erstmal( und aus mangel an einem quarz) mit dem internen Takt von 4MHz laufen....

das problem ist, entweder springt er nicht in meinen interrupt, der interrupt funktioniert nicht, oder er gibt nix aus...

zur programmierung habe ich das AVRStudio4 genommen und lasse es dort erstmal in der simulation laufen

wäre nett, wenn mir jemand helfen könnte



Geschrieben von phlox81 am 15.01.2008 um 19:19:

 

Kann in der C Datei keine Fehler erkennen, und es scheint ja auch zu kompilieren wie du beschreibst.

Evtl. würde es helfen die C Datei mal etwas besser einzurücken, dann wäre der Code lesbarer.
Kannst auch gerne den betreffenden Teil des Codes hier in das Forum posten.



Geschrieben von rhamirez am 15.01.2008 um 19:29:

 

stimmt, er compiliert es ohne probleme,fehler,warnungen, nur nehmen stunden,minuten sekunden keine neuen werte an, warum auch immer.
kann es gerne einrücken und direkt posten.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
//----------includes---------
#include <avr/io.h> 
#include <stdint.h>
#include <util/delay.h>
#include <avr/interrupt.h>
//---------------define-----------
#ifndef F_CPU
         #define F_CPU 4000000UL     
                    #endif

#ifndef OCR1A
         #define OCR1A OCR1	
                   #endif

#ifndef WGM12
        #define WGM12 CTC1
                    #endif

#define XTAL 4000000L	
   #define DEBOUNCE	256L
           #define uchar unsigned char
                   #define uint unsigned int
 

//----- variablen
uchar prescaler;
          uchar volatile second;
		
          volatile int8_t stunde=0;
                      volatile int8_t minute=0;
                                  volatile int8_t sekunde=0;

//----interrupt	hier könnte der fehler liegen
		
SIGNAL (SIG_OUTPUT_COMPARE1A)
{
 
           #if XTAL % DEBOUNCE                     // bei rest
          OCR1A = XTAL / DEBOUNCE - 1;	// debounce vergleich  
            #endif
               if( --prescaler == 0 ){
                 prescaler = (uchar)DEBOUNCE;
                   sekunde++;	second++;		
                       #if XTAL % DEBOUNCE			//
                            OCR1A = XTAL / DEBOUNCE + XTAL % DEBOUNCE - 1;
                                        #endif
                           }
}



//------------------main------------ 
int main (void) {
           sei();
	
	// ausgänge setzen
                 DDRB = 0xff;
	DDRA = 0xff; 
	DDRD = 0xff;
    
                 PORTB = 0x00; 
	PORTA = 0x00; 
	PORTD = 0x00; 
	           

 while(1)
 { 
             TCCR1B = 1<<WGM12^1<<CS10;			
              OCR1A = XTAL / DEBOUNCE - 1;          
                  TCNT1 = 0;                           
                     second = 0;
                              prescaler = (uchar)DEBOUNCE;         
                                  TIMSK=1<<OCIE1A;                                                     



 for(;;){
   
if( second == 60 )
      second = 0;


if (sekunde == 60)
{minute++; sekunde = 0;}

  if (minute ==60)
 {minute=0; stunde++;
 } 
  if (stunde ==25)
 {stunde=1;} 

  PORTD=stunde;
  PORTA=minute;
  PORTB=sekunde;


}

                  }
   return 0;                 
}


edit: bitte Code Tags verwenden.



Geschrieben von phlox81 am 15.01.2008 um 20:03:

 

Hm, lass mal die 2 Endlosschleife weg. (for(;Augenzwinkern )
weil da geht er ja nicht mehr raus, evtl. ist das auch der Fehler.

Und hast du schon mal versucht, die Schleifen mit einem sleep pausieren zu lassen?



Geschrieben von rhamirez am 15.01.2008 um 20:59:

 

hier das datenblatt zu meinem microkontroller vielleicht hilft es, nein es liegt nicht an der forschleife

ansonsten nehme ich auch einen föllig neuen ansantz gerne an



Geschrieben von Exekutor am 16.01.2008 um 15:40:

 

Also ich hab das nur mit Assembler gemacht daher bin ich mir net so sicher, aber ist in Zeile 68 das ^1 normal?

Das kam mir eben beim drüberlesen etwas spanisch vor.

Ciao Exe



Geschrieben von phlox81 am 16.01.2008 um 16:06:

 

Man sollte vielleicht dazu sagen, das das Tutorial/Beispiel des Herstellers bei ihm auch nicht läuft.
Dies war gestern noch im Chat erwähnt worden.
Daher kann der Code durchaus ok sein.



Geschrieben von Exekutor am 16.01.2008 um 18:37:

 

Das ganze wird über ein Mikrocontroller Board ausgegeben oder?
Mal ein anderes probiert?

Ciao Exe



Geschrieben von antilooppe2 am 31.01.2008 um 08:46:

 

Das prjekt ist mitlerweile fertig wollte ich ma erwähnen



Geschrieben von Exekutor am 31.01.2008 um 09:46:

 

Und wo war der Fehler?

Ciao Exe



Geschrieben von rhamirez am 04.02.2008 um 22:11:

 

wo der fehler lag gute frage ich habe keine ahnung, mehrere nette leute haben mir geholfen, auch sie können nicht sagen wieso weshalb warum, hauptsache es läuft


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH