Forum: Mikrocontroller und Digitale Elektronik Umstieg von Atmega8 auf Atmega168


von Rico Heinrich (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

wegen des größeren Flashspeichers möchte ich auf einen Atmega168 
umsteigen, aber der 168 reagiert überhaupt nicht. Selbst ein völlig 
simples Programm bringt nicht das gewünschte Ergebnis, das gleiche 
Progamm läuft auf dem Atmega8  problemlos und setzt den Pin auf high.

Woran könnte es liegen?

Viele Grüße
Rico

von Otto (Gast)


Lesenswert?

Hast Du die Vektortabelle geändert?

Gruss Otto

von Falk B. (falk)


Lesenswert?

Den richtigen Typ im AVR-Studio eingestellt?

MFG
Falk

von Rico Heinrich (Gast)


Lesenswert?

Vektortabelle?

Welche Vektortabelle meinst du, die ich da noch ändern muss.


Im Studio ist der richtige Typ eingestellt, der Atmega168.

Gruß
Rico

von Paul (Gast)


Lesenswert?

ich glaube da gibts von Atmel Application Notes dazu:
AVR094 und AVR095

Grüße

Paul

von AntonU (Gast)


Lesenswert?

Hallo!
Meiner Meinung nach, gibt es nicht weniger als zwei Varianten:
1) Wie Otto sagt - das Problem mit Vektortabelle von Interrupt. M168 und 
M8 verschiedene Vektortabellen haben. So es ist moeglich, dass du die 
Interruptvektoren nicht geaendert hast?
2) Das Problem mit der Registeren. Einige Register in M168 und M8 
koennen verschiedene Biten haben. Z.B. in M8 FOC1A und FOC1B sind im 
Register TCCR1A, und in M168 - in TCCR1C

von Patrick (Gast)


Lesenswert?

Lässt Du denn Dein Programm so laufen, wie es im angehängten Code ist? 
Mit den auskommentierten Codezeilen? Dann wäre es kein Wunder, das 
nichts geschieht.

von Johannes M. (johnny-m)


Lesenswert?

Um die Vektortabelle kümmert sich in C der Compiler, vorausgesetzt 
natürlich, der richtige Controller-Typ ist im Makefile bzw. AVRStudio 
eingestellt.

Allerdings dürfte das Programm so wie es oben steht tatsächlich weder 
auf nem Mega8 noch auf nem Mega168 etwas Sinnvolles machen, wie 
Patrick schon angedeutet hat.

von Toni (Gast)


Lesenswert?

Versuch mal das Programm.

#define F_CPU 14745600

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

int main()
{
  unsigned char i;

  DDRB = 0xFF;

  while( 1 ) {

    PORTB |= (1 << PB0);


    for( i = 0; i < 50; i++ )
      _delay_ms( 10 );


    PORTB &= ~(1 << PB0);


    for( i = 0; i < 50; i++ )
      _delay_ms( 10 );

  }
}


Ein einfaches Blinklicht mit delay. Läuft auf nem 48/88/168 wenn der 
richtige Controller eingestellt wurde.

PS: Anstatt nem delay lieber nen Interrupt verwenden.


Gruß

von Rico Heinrich (Gast)


Lesenswert?

Hallo,

ersteinmal Danke an alle! DANKE!

Ich habe das Problem gelöst. Ihr habt recht mein Code macht wenig 
sinnvolles, sollte er aber auch nicht, sondern lediglich den Pin PB0 auf 
High setzen.

Der Fehler lag aber wo anders, ich hatte dem Compiler nicht bekannt 
gegeben das ich jetzt mit dem Atmega168 statt dem Atmega8 arbeite. Ich 
habe also jetzt ein neues Project angelegt und jetzt funktioniert es!

Nochmal Danke für die Hilfestellungen.

Viele Grüße
Rico

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.