www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik TIMER16Bit beim ATmega128 anders als beim ATmega32 ?


Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Sportsfreunde!

Ich habe folgendes Problem:

Das unten aufgeliestete Programm funktioniert reibungslos an einem 
ATmega32. Spiele ich es auf ein ATmega128, tut sich bezüglich des TIMERs 
nichts. Soll da der Timer anders voreingestellt werden? Die Datenblätter 
zeigen keine große Unterschiede   :(



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

//globale variablen
volatile uint8_t sekunde=0;
volatile uint8_t minute=0;
volatile uint8_t stunde=0;

// prototyps
void timer1_init();
void uhrzeit();


int main(){

  DDRB=0xFF;    //Am PORTB werden Sekunden binär angezeigt
    PORTB=0xFF;

  DDRD=0xFF;    //Am PORTD werden Minuten binär angezeigt
    PORTD=0xFF;

  DDRA=0xFF;    //Am PORTA werden Stunden binär angezeigt
    PORTA=0xFF;

    timer1_init();

    while(1){
    }
}


void timer1_init(){

    uint16_t compare_value = 31249;

    TCCR1A =  0;
    TCCR1B =  0;

    //TCCR1A |= (0<<COM1A1) | (1<<COM1A0);
    TCCR1B |= (1<<WGM12) | (1<<CS12);  // CTC-Mode | Prescaler 256

    TCNT1H=0;                                /* Timer1-Datenregister */
    TCNT1L=0;                                /* zuruecksetzen */

    TIMSK |= (1<<OCIE1A);                // CompareA Interrupt erlauben
    OCR1A = compare_value;               // CompareA-Wert: 16-Bit gross

    sei();                               // Global Interrupts aktivieren

}

ISR(TIMER1_COMPA_vect){
    uhrzeit();
  PORTB = ~sekunde;
  PORTD = ~minute;
  PORTA = ~stunde;
}

void uhrzeit(){

  if(sekunde<60){
    sekunde ++;

  }else{
    sekunde=0;
    if(minute<60){
      minute++;
    }else{
      minute=0;
      if (stunde<24){
        stunde ++;
      }else{
        stunde=0;
      }
    }
  }
}

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
m103-Fuse gecheckt?

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist das und wo findet man das? Kenne nur SUT_CKSEL, der ist auf Int. 
8MHz eingestellt.
Wie gesagt, andere Programme (ohne Timer) laufen auf dem ATmega128

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sabaka schrieb:
> Was ist das und wo findet man das?

im Datenblatt...

und 
http://www.mikrocontroller.net/articles/AVR_Checkl...

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Justus für deine schnelle Antworten.
Ich bin jetzt ein wenig schlauer geworden,
aber wo man den M103C-Fuse bit verstellen kann, weiß ich immer noch 
nicht.

Und wenn ich diesen "ATmega103 compatibility mode" abstellen möchte soll 
er dann auf "1" gesetzt werden?

Thx!

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah, der war doch unter allen Fuses, habe zuerst übersehen. Sorry ;)

Aber der Timer läuft immer noch nicht. Also liegt nicht an dem M103C

Bitte Hilfe  : ((((

Autor: Herbert B. (braherb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
in dem du die Fusebits umprogrammierst villeicht hilft dise seite

http://www.engbedded.com/fusecalc

gruss

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sabaka schrieb:
> Das unten aufgeliestete Programm funktioniert reibungslos an einem
> ATmega32. Spiele ich es auf ein ATmega128,

Ich frag mal ganz vorsichtig:
aber neu gebaut hast du es vorher?

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vlad Tepesch schrieb:
> aber neu gebaut hast du es vorher?

Neue gebaut? Was meinst du genau?

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sabaka schrieb:
> Neue gebaut? Was meinst du genau?

wahrscheinlich ob du alles neu kompiliert hast mit den geänderten 
Einstellungen für den µC...

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja neue kompiliert habe ich! Im Programm habe ich allerdings nichts 
geändert, nur beim übertragen habe ich den ATmega128 ausgesucht und 
jetzt auch den M103C-Fuse gesetzt.

Ich kann nicht mehr... bitte löst mein Problem..   :(((

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sabaka schrieb:
> Ja neue kompiliert habe ich! Im Programm habe ich allerdings nichts
> geändert, nur beim übertragen habe ich den ATmega128 ausgesucht und
> jetzt auch den M103C-Fuse gesetzt.

hast du nun in der Toolchain auf den neuen µC umgestellt, oder nicht?

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich weiß nicht was ein Toolchain ist, aber unter AVR-Studio habe ich 
folgendes gemacht:
Kompiliert (mehrmals)
Connect
Connect to the Selected AVR Programmer
Im neuen Fenster unter Main im Punkt Device and Signature Bytes 
ATmega128 ausgesucht und danach Programm übertragen.

Und wie gesagt andere Programme (ohne Timer) kann ich übertragen und sie 
laufen

Ich am Zweifeln..    :(((

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Kompiliert (mehrmals)


Und da den richtigen Controller eingetragen oder noch den alten?

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja den richtigen...

Bitte.. bitte... Hilfe

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sabaka schrieb:
> Ja den richtigen...

deiner Beschreibung nach, hast du nur im Programmer den richtigen 
eingetragen und nicht im Compiler (Avr-Studio: Project Settings oder so)

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay das war was neues für mich Avr-Studio: Project Settings, aber geht 
trotzdem nicht...   :(((   Eine andere Idee?

Autor: J.-u. G. (juwe)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Unter "Project" - "Configuration Options" Deinen Controller und dessen 
Taktfrequenz eintragen.

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe ich gemacht, aber ...  :(((

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sabaka schrieb:
> Okay das war was neues für mich Avr-Studio: Project Settings,
heist das, du hast es da jetzt umgestellt?

>aber geht trotzdem nicht...   :(((   Eine andere Idee?
was geht nicht?
compiler-Fehler?
Linker-Fehler?
Target tut einfach nix?


Hinweis:
Sabaka schrieb:
> TCNT1H=0;                                /* Timer1-Datenregister */
> TCNT1L=0;                                /* zuruecksetzen */

in C unnötig!
beschrieb das Register als 16-Bit-Register, da macht der Compiler auch 
die Reihenfolge richtig (stimmt hier aber)
TCNT1 = 0;


mich wundert ehrlich gesagt, dass es überhaupt kompiliert.
du benutzt uintx_t-Typen ohne, die stdint.h includiert zu haben.
Eigentlich sollten jede menge Compile-Errors commen.

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe im Compiler µC und Frequenz eingestellt, es kompiliert und 
zeigt keine Fehler und nicht mal eine Meldung.

Übertragen geht auch, und dann schweigt mein µC..
am PORTB werden keine Sekunden angezeigt (was beim ATmega32 der Fall 
war).

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vlad Tepesch schrieb:
> mich wundert ehrlich gesagt, dass es überhaupt kompiliert.
> du benutzt uintx_t-Typen ohne, die stdint.h includiert zu haben.

Die zieht avr/io.h automatisch mit rein.


Sabaka schrieb:
> Soll da der Timer anders voreingestellt werden? Die Datenblätter
> zeigen keine große Unterschiede   :(

Die Datenblätter haben recht ;-) Timer1 im Mega128 wird genauso 
programmiert, wie Timer1 im Mega32.

Am einfachsten wäre die Fehlersuche, wenn du mal ein komplettes 
Projektverzeichnis mit der Mega128-Version zusammen zipst, und hier als 
Anhang einstellst.

Oliver

Autor: Sabaka (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier ist das Programm

Thx

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die einfachste Lösung ist doch, im AVRStudio ein neues Projekt mit den 
richtigen Einstellungen eröffnen und den Quellcode per Copy'N'Paste 
erzeugen.
Dann sieht man ja, woran es liegt.

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht noch was:

ATmega128 sitzt auf dem STK501-Board,
wie gesagt, andere Programme ohne Timer1 funktionieren,
nur dieses Programm, welches auf dem ATmega32(STK500_Board) 
funktioniert, schweigt hier.

Sind vielleicht auf dem STK-501 für den Timer etwas einstellen?

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
STK500-Besitzer schrieb:
> Die einfachste Lösung ist doch, im AVRStudio ein neues Projekt mit den
>
> richtigen Einstellungen eröffnen und den Quellcode per Copy'N'Paste
>
> erzeugen.


Dieser neuer Code wird ebenso fehlerfrei kompiliert und übertragen. Der 
µC schweigt aber..   :(((

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann der Timer1 eventuell defekt sein?

Haste zufällig nen zweiten ATMEGA128 da, um das zu testen?

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe leider keinen zweiten 128 :(
Aber alles andere - UART, einzelne PORTs - funktioniert.

Habe grade TIMER3 (auch 16Bit) ausprobiert geht auch nicht

Was soll ich nur machen..  :((

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Haste nen Debugger, um dir mal das Programm auf dem µC schrittweise 
anschauen zu können?

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und du programmierst auch ganz sicher das richtige hex-File in den 
Prozessor?

Oliver

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja im AVR-Studio gibt es eins, aber ich habe noch nie damit gearbeitet.
Kennst du ein Tutorial oder Änliches dazu?

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du meinst sicher den Simulator.

Hab ich mal dort durchlaufen lassen und das Programm kommt jede sekunde 
in der ISR vorbei.

Schau mal nach dem Hexfile, welches du in den µC proggst. Das sucht sich 
das STK500-Frontend nämlich nicht von alleine.
Ist mir auch schon mal passiert.

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oliver schrieb:
> Und du programmierst auch ganz sicher das richtige hex-File in den
>
> Prozessor?

Ja das mache ich Oliver. Hast du denn ein ATmega128 und Möglichkeit mein 
Programmchen auszutesten?

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Skript Kiddy schrieb:
> Schau mal nach dem Hexfile, welches du in den µC proggst. Das sucht sich
>
> das STK500-Frontend nämlich nicht von alleine.
>
> Ist mir auch schon mal passiert.Beitrag melden | Bearbeiten | Löschen |


Ja Skript Kiddy das ist mir am Anfang auch schon mehr mals passiert aber 
jetzt übertrage ich das Richtige und irgendwie reagiert er nicht beim 
Timer..

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab das Proggi mal auf nem ATMEG1284P getestet. Auf PORTB werden die 
Sekunden hochgezählt.

Hardware:
Pollin Atmel Evaluation board + Addon board
ATMEGA1284P-PU   (Pin-Kompatibel zu Atmega32)

Passiert bei dir denn überhaupt nichts auf PORTB?

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein überhaupt nichts. LEDs sind aus :(

Danke Skript Kiddy trotzdem für deine Mühe

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe auch schon andersrum probiert, dass die LEDs beim Hochzählen 
ausgehen sollen, dann bleiben sie immer an :(

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
der Atmega läuft sicher mit 8MHz?

vllt läuft der auf 1MHz und PORTB wird erst nach 8 Sekunden hochgezählt?

Mach mal den Compare Wert sehr klein und schau mal was dann passiert.

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja er ist auf 8MHz eingestellt und bei anderen CompareWerten und 
Prescalern läuft genauso NICHTS..

Autor: Oliver Ju. (skriptkiddy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann bin ich mit meinem Latein am Ende.

Autor: Sabaka (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich danke dir Skript Kiddy trotzdem vom ganzen Herzen!

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.