Forum: Mikrocontroller und Digitale Elektronik AVR Code Portierung ATmega328P ATmega8


von -.-.- (Gast)


Lesenswert?

Hallo,
ich versuche gerade Code, der eigentlich für den atmega328p 
konzeptioniert wurde auf einen atmega8 zu portieren. Ich hänge nur noch 
an einer Stelle:
1
PCMSK0 |= (1 << PCINT0);

Nach dem Datenblatt wälzen komme ich zum Schluss, dass der atmega8 diese 
funktion (oder so ähnlich) nicht unterstütz.
Gehe ich recht in der Annahme, dass ich mit diesem Register steuern 
kann, dass ein Interrupt nur auftritt, wenn eine Änderung am PIN PB0 
auftritt? und die anderen Ports ignoriert werden?

Wie kann ich diese Codezeile auf den atmega8 portieren?

Danke

von Kirsch (Gast)


Lesenswert?

Das Stimmt der MEGA 8 hat keine Pin-Change-Interrupt, nur die 3 
EXT-Int-Pins.

von Paul B. (paul_baumann)


Lesenswert?

Hast Du nicht einen Atmega48 oder 88 oder 168 satt Atmega8?
Da müßte es diesen Interrupt auch geben.

MfG Paul

von -.-.- (Gast)


Lesenswert?

Paul B. schrieb:
> Hast Du nicht einen Atmega48 oder 88 oder 168 satt Atmega8?
> Da müßte es diesen Interrupt auch geben.
>
> MfG Paul

Nein ;) Ich weiß das es ein atmega8 ist. Deswegen frag ich ja^^ :)

von -.-.- (Gast)


Lesenswert?

bzw. ist es ein atmega8L, bleibt aber ein m8

von Paul B. (paul_baumann)


Lesenswert?

-.-.- schrieb:
> Ich weiß das es ein atmega8 ist. Deswegen frag ich ja^^ :)

Gute Antwort auf die falsche Frage.
;-)
MfG Paul

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

-.-.- schrieb:
> Ich weiß das es ein atmega8 ist.

Ist dieser durch den moderneren ATmega88 ersetzbar?

Dieser ist pinkompatibel zum uralten ATmega8, aber sonst kompatibel mit 
dem ATmega328. Dann wärest Du sofort aus dem Schneider.

: Bearbeitet durch Moderator
von -.-.- (Gast)


Lesenswert?

Frank M. schrieb:
> -.-.- schrieb:
>> Ich weiß das es ein atmega8 ist.
>
> Ist dieser durch den moderneren ATmega88 ersetzbar?
>
> Dieser ist pinkompatibel zum uralten ATmega8, aber sonst kompatibel mit
> dem ATmega328. Dann wärest Du sofort aus dem Schneider.

Das hat weniger mit dem "ersetzbar" zu tun. Ich hab den ATmega328p mehr 
als Entwicklungsplattform genutzt, da der ATmega8 verbaut ist. Auf dem 
wollte ich den Code laufen lassen, da ich damit, im besten Fall nicht 
alle ATmega8 durch ATmega328 tauschen muss (TQFP 32).

Das bringt mich zurück zu meiner Anfangsfrage:
Kann ich
1
PCMSK0 |= (1 << PCINT0);

durch was auf dem atmega8 ersetzen? Oder muss ich das in der ISR machen?

von Michael U. (amiga)


Lesenswert?

Hallo,

Der Mega8 kennt keinen PinChange-IRQ wie schon angemerkt.
Du kannst es so nicht ersetzen, weil die Hardwarefunktion existiert.
Ob Du es generell durch andere Programmierung erstezn kannt, hängt von 
Deinen Absichten, Deiner Hardware usw. ab, die wir nicht kennen.

PS: warum entwickelt man für einen Mega8 mit einem Mega328 ohne sich 
über die Unterschiede zu informieren?
Warum stellt man beim Entwickeln nicht wenigstens ab und zu den Mega8 
als Prozessor ein und läßt den Kram mal compilieren?

Gruß aus Berlin
Michael

von Falk B. (falk)


Lesenswert?

@-.-.- (Gast)


>Das bringt mich zurück zu meiner Anfangsfrage:
>Kann ich

>PCMSK0 |= (1 << PCINT0);

>durch was auf dem atmega8 ersetzen? Oder muss ich das in der ISR machen?

Diese Funktion kann man mit INT0 oder INT1 nachbauen, dazu muss man aber 
ein anderes Pin und einen anderen Interrupt nutzen. Ausserdem 
funktioniert das auf dem ATmega8 nicht im tiefen Sleep Mode wie 
Power Save oder Power Down, weil dann die Takte nicht laufen. Bei Active 
oder Idle geht es.

von Draco (Gast)


Lesenswert?

-.-.- schrieb:
> durch was auf dem atmega8 ersetzen? Oder muss ich das in der ISR machen?

Du kannst das nicht einfach "ersetzen". Du müsstest dann deinen Code 
soweit anpassen das er einen der Ext-Int Pins an PD2/3 nutzt. Wir alle 
kennen ja den dazugehörigen Code nicht, inweit dieser auf steigende oder 
fallende Flanken reagiert oder beides. Wie gesagt - du musst dann die 
ganze ISR von Pin-Change-Int zu Ext-Int umstellen / schreiben. Oooooder, 
du nutzt halt keinen Atmega8 sondern einen 88er der ist Pin sowie 
Softwarekompatibel zum 8 als auch zum 328.

von Wolfgang (Gast)


Lesenswert?

-.-.- schrieb:
> Ich hab den ATmega328p mehr als Entwicklungsplattform genutzt, da
> der ATmega8 verbaut ist.

Hast du schon mal daran gedacht, etwas für den Umsatz der Wirtschaft zu 
tun und 2€ in ein weiteres Board mit einem ATmega328 zu investieren?

von -.-.- (Gast)


Lesenswert?

Falk B. schrieb:
> @-.-.- (Gast)
>
>>Das bringt mich zurück zu meiner Anfangsfrage:
>>Kann ich
>
>>PCMSK0 |= (1 << PCINT0);
>
>>durch was auf dem atmega8 ersetzen? Oder muss ich das in der ISR machen?
>
> Diese Funktion kann man mit INT0 oder INT1 nachbauen, dazu muss man aber
> ein anderes Pin und einen anderen Interrupt nutzen. Ausserdem
> funktioniert das auf dem ATmega8 nicht im tiefen Sleep Mode wie
> Power Save oder Power Down, weil dann die Takte nicht laufen. Bei Active
> oder Idle geht es.

Erzähl mehr davon lechz

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

-.-.- schrieb:
> Erzähl mehr davon lechz

Lies einfach selber, statt Falk diese Arbeit zuzumuten:

  AVR-Tutorial: Interrupts

Da ist u.a. auch INT0 und INT1 erklärt.

: Bearbeitet durch Moderator
von Falk B. (falk)


Lesenswert?

@  -.-.- (Gast)

>Erzähl mehr davon lechz

Nö. Steht doch fast alles da. Der Rest ist eine Aufgabe fööör den 
Schöööööler! Nur selber denken macht geistig fett (tm).

: Bearbeitet durch User
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.