Forum: Mikrocontroller und Digitale Elektronik Austausch von atmgea 168 zu atmega 644


von eukalyptusbonbon (Gast)


Lesenswert?

hallo zusammen.
habe mit einem atmega 168 ein glcd angesteurt und das ganze hat 
funktioniert. nun wollte ich einen atmega 644 anstelle des 168 
einsetzen. am aufbau hat sich nichts verändert, nur ruft der 644 jetzt 
irgendwie nichtmehr meine interruptfunktion auf.
er benutzt den timer0 und ist dort auf den compA modus geschalten.
aber wie gesagt, diese hier wird nicht aufgerufen.

ISR (TIMER0_COMPA_vect)
{...
}
(vorher mit dem 168 ging's)
hab auch keine anderen namen bei den registern vorgefunden. (die 
einstellungen sind gleich)

von Rudolph (Gast)


Lesenswert?

eukalyptusbonbon schrieb:
> nun wollte ich einen atmega 644 anstelle des 168
> einsetzen. am aufbau hat sich nichts verändert

Der 168 hat 32 Pins, der 644 hat 44 Pins.

von (prx) A. K. (prx)


Lesenswert?

Ist schon vorgekommen, dass ISRs andere Namen hatten.

von eukalyptusbonbon (Gast)


Lesenswert?

Ja schon klar mit der pin zahl.. geht ja nur um das Prinzip.  Kann auf 
jedenfall feststellen das das Programm bis zu ISR läuft. Dir namen der 
isr routinen sind auch gleich (hab einmal im Datenblatt und dann noch 
auf einer seite geschaut) :/

von Kaj (Gast)


Lesenswert?

Rudolph schrieb:
> der 644 hat 44 Pins
kommt auf das gehäuse drauf an: DIP hat nur 40 Pins.

von Uwe S. (de0508)


Lesenswert?

Hallo,

ich werfe nur mal ein, dass es einen atmega644 und atmega644p gibt und 
die unterscheiden sich wirklich !

*AVR508: Migration from ATmega644 to ATmega644P*
http://www.atmel.com/Images/doc8038.pdf

von eukalyptusbonbon (Gast)


Lesenswert?

der hier ist vom typ atmega 644V10PU - müsste also passen oder?
also mit atmgea 644

von eukalyptusbonbon (Gast)


Lesenswert?

#include <asf.h> //von avr studio generiert -> wählt dazugehörige 
dateien aus, interrupt,board,...
(auch wenn man #include <avr/interrupt.h> probiert, geht es nicht)

uint8_t zeit_ms=0;

int main(void)
{
sei();
initialisierung_timer0();

     while(1)
     {...
           warten_ms(20);
     }
}
void initialisierung_timer0(void)
{
  TCCR0A =0x02; //clear timer on compare match erlauben
  OCR0A  =124;  // Output Compare Register A für 1 millisekunde
  TIMSK0 =0b000000010;  //Interrupt bei Match
}
void warten_ms(uint8_t millisekunden)
{
  TCNT0 =0;
  zeit_ms=0;
  TCCR0B =Timer0_start;  //64 prescaler

/////////Hier kommt er noch an/////////////////
  while (zeit_ms<millisekunden) //1 Match hat genau eine Millisekunde
  {
    ;
  }
//////////////^in der Schleife hängt er////////////
  TCCR0B =Timer0_stopp;
}

ISR (TIMER0_COMPA_vect)
{
  zeit_ms++;
}

von eukalyptusbonbon (Gast)


Lesenswert?

die funktionsprototypen stehen auch noch über main drüber.

von g457 (Gast)


Lesenswert?

volatile

von eukalyptusbonbon (Gast)


Lesenswert?

<3 :). aber komisch warum das damals ohne probleme getan hat

von Rudolph (Gast)


Lesenswert?

eukalyptusbonbon schrieb:
> geht ja nur um das Prinzip

eukalyptusbonbon schrieb:
> am aufbau hat sich nichts verändert

Was davon denn nun? :-)
Ein Unterschied ist, dass der 644 JTAG hat und wenn man die Pins als 
I/Os benutzen möchte muss man JTAG erstmal abschalten.

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.