Forum: Mikrocontroller und Digitale Elektronik Umstieg Atmega16 auf Atmega644


von D a v i d K. (oekel) Benutzerseite


Angehängte Dateien:

Lesenswert?

Hi,

ich habe schon einige Upgrades hinter mir, doch diesmal scheine ich 
einen Teil vergessen zu haben. Die entsprechende AppNode von Microchip 
kann ich ebenfalls nicht finden.

Folgendes ist Gegeben:
- Hardware mit aufgestecktem Atmega16
- Passende Software/Quellcode im CMake-Projekt (Auf Ubuntu)
- stk500 kompatibler Flasher (MySmartUSB Light AVRDude)

Mit der Propery für den Atmega16
- compiliert
- flasht
- läuft die Hardware

Mit den Änderungen für den Atmega644 in:
- (Fuses bei beiden auf internenOC)
- timer0
- timer2
- compiliert
- flasht
- und läuft nicht mehr ;)

Im Anhang habe ich die Zeilen, welche angefasst wurden mal 
zusammengeschrieben.
Es ist recht wenig anders, auch die Pinnbelegung ist identisch (siehe 
init();)

Trotzdem mal wieder die Hoffnung, dass viele Augen mehr sehen und eure 
Erfahrung meine vergessenen Änderungen aufdecken.

Noch mal zusammenfassend:
Wenn ich den CMake-Parameter wieder zurück auf Atmega16 stelle 
baut/flasht/läuft das Program (natürlich nur mit dem Atmega16 im 
Sockel).

Grüße Oekel

PS: in dem hochgeladenen Snippet sehe ich gerade, dass ich das
1
while(1)
2
{
3
  //...
4
  wdt_reset();
5
}

zu viel gelöscht habe. Also daran liegt es nicht ;)

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

Hi,

ist es ein Atmega644 oder Atmega644P

von Walter T. (nicolas)


Lesenswert?

D a v i d K. schrieb:
> Die entsprechende AppNode von Microchip
> kann ich ebenfalls nicht finden.

http://ww1.microchip.com/downloads/en/AppNotes/doc8001.pdf

Für die P-Version. Hier noch der Unterschied zwischen 644 und 644P:

http://ww1.microchip.com/downloads/en/AppNotes/doc8038.pdf

: Bearbeitet durch User
von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Karl M. schrieb:
> Hi,
>
> ist es ein Atmega644 oder Atmega644P

Ihr meint ich habe mir die falschen Fuses rausgesucht?
Also auf dem Chip steht nur Atmega644A

Die Packung aus der ich ihn entnommen habe hat die
Mouser-Artikenummer: 556-ATMEGA644PA-PU

-->Na super es liegen beide drin :P

Also ich habe beide zur Auswahl. Ein Umschreiben/Umstecken auf den 
Atmgea644P
lässt den gleichen Code aber immer noch nicht laufen.
Also heute Abend ist ein tieferer Blick in die AppNodes nötig.

Danke dafür. Ich halte euch auf den Laufenden, sobald es stimmig wird...

von Karl M. (Gast)


Lesenswert?

Ok,

ist JTag aktiv?

Beitrag #5827107 wurde von einem Moderator gelöscht.
Beitrag #5827111 wurde von einem Moderator gelöscht.
von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Karl M. schrieb:
> Ok,
>
> ist JTag aktiv?
Für mein jetziges Design muss es aus sein.
Hab den Port aber schon freigeschaufelt,  um einen Debugger damit 
betreiben zu können.
Bisher aber keine Zeit die frisch gekauften ICE (unter Linux) in Betrieb 
zu nehmen.

Beitrag #5827148 wurde von einem Moderator gelöscht.
von Thomas (kosmos)


Lesenswert?

JTAG disable kannst du auch in den Programmcode schreiben, musst nicht 
extra die Fuses verstellen

von Peter D. (peda)


Lesenswert?

D a v i d K. schrieb:
> - und läuft nicht mehr ;)

Das ist natürlich wieder mal eine super präzise Fehlerbeschreibung.

Wozu die vielen #ifdefs, wenn kein Unterschied ist?

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Thomas O. schrieb:
> JTAG disable kannst du auch in den Programmcode schreiben, musst nicht
> extra die Fuses verstellen
Nur der Interesse halber: Wie?


Peter D. schrieb:
> D a v i d K. schrieb:
> Wozu die vielen #ifdefs, wenn kein Unterschied ist?
Es gibt ja schon minimale Unterschied..


Wie auch immer, ich habe es nun hinbekommen, indem ich den
1
ISR(TIMER2_COMPA_vect)

statt
1
ISR(TIMER2_COMPB_vect)

verwende und entsprechend
1
void timer2_init (void)
2
{
3
    //[OCR2B = OCR2_TOP;]
4
    OCR2A = OCR2_TOP;
5
    //[TIMSK2 |= (1 << OCIE2B);]
6
    TIMSK2 |= (1 << OCIE2A);
7
#endif
8
}

Somit war alles andere korrekt.

Kann mir jemand noch abschließend sagen, was für den "***2B" 
anders/zusätzlich machen muss, damit dieser läuft?

Grüße und schönen Abend

: Bearbeitet durch User
von Karl M. (Gast)


Lesenswert?

D a v i d K. schrieb:
> Thomas O. schrieb:
>> JTAG disable kannst du auch in den Programmcode schreiben, musst nicht
>> extra die Fuses verstellen
> Nur der Interesse halber: Wie?

Evtl. schreiben die so etwas ins Datenblatt.

>
> Wie auch immer, ich habe es nun hinbekommen, indem ich
> denISR(TIMER2_COMPA_vect)
>
> stattISR(TIMER2_COMPB_vect)
>
> verwende und entsprechend
> void timer2_init (void)
> {
>     //[OCR2B = OCR2_TOP;]
>     OCR2A = OCR2_TOP;
>     //[TIMSK2 |= (1 << OCIE2B);]
>     TIMSK2 |= (1 << OCIE2A);
> #endif
> }
>
In welchem Modus läuft den der Timer2?
Was sind dann die TOP, Min- und Maxwerte?

von D a v i d K. (oekel) Benutzerseite


Lesenswert?

Karl M. schrieb:
> In welchem Modus läuft den der Timer2?
> Was sind dann die TOP, Min- und Maxwerte?

Steht doch alles im Anhang vom Initialen Post!

von Peter D. (peda)


Lesenswert?

D a v i d K. schrieb:
> Kann mir jemand noch abschließend sagen, was für den "***2B"
> anders/zusätzlich machen muss, damit dieser läuft?

Nun, der CTC-Mode geht nur mit OCR2A bzw. OCR2, wie es in der Tabelle 
"Waveform Generation Mode Bit Description" steht.
Es gibt dort keinen Eintrag mit TOP = OCR2B.

von Karl M. (Gast)


Lesenswert?

Peter D. schrieb:
> D a v i d K. schrieb:
>> Kann mir jemand noch abschließend sagen, was für den "***2B"
>> anders/zusätzlich machen muss, damit dieser läuft?
>
> Nun, der CTC-Mode geht nur mit OCR2A bzw. OCR2, wie es in der Tabelle
> "Waveform Generation Mode Bit Description" steht.
> Es gibt dort keinen Eintrag mit TOP = OCR2B.

Danke Peter,

das wollte ich David K., indirekt auch vermitteln.

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.