Forum: Mikrocontroller und Digitale Elektronik 2 AtMega über 2 Draht


von Basti (Gast)


Lesenswert?

Hallo zusammen,
ich habe folgendes Problem:Ich habe 2 Atmega über eine 2
Drahtverbindung miteinander verbunden. Der eine Atmega generiert über
die eine Leitung ein Clock Signal und über die andere Werden Bits
gesendet. Der zweite Atmega ließt bei jeder steigenden Flanke (externer
Interrupt) des Clock Signals den Datenkanal aus. Leider bekomme ich nie
den richtigen "wert" angezeigt. Die Ausgabe ist immer 0 oder 1. Woran
kann es liegen????

Interrupt Routine des 2. Controllers der die Daten auslesen soll.
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
    merker=1;
    if(PIND.4)
    {
        wert=0x01;
    }
    else
    {
        wert=0x07;
    }

Mainroutine der den Wert der Interrupt Routine ausgeben soll:

     if(merker){
    merker=0;
     if(PIND.4)
    {
        wert=0x01;
    }
    else
    {
        wert=0x07;
    }
    }
    printf(" %3x\n\r",wert);

Das Signal ist richtig welches über die Leitungen geht, dass habe ich
mit dem Oszi angeschaut. Die I2C Leitungen werden schon andersweitig
genutzt.
Danke für eure Hilfe

von Basti (Gast)


Lesenswert?

Oh das ist ein Fehler unterlaufen, die Main outine muß heißen:

Mainroutine der den Wert der Interrupt Routine ausgeben soll:

     if(merker)
    {
    merker=0;
    printf(" %3x\n\r",wert);
    }

von Alex Trusk (Gast)


Lesenswert?

ist "wert" als volatile deklariert?

von Basti (Gast)


Lesenswert?

Hallo Alex,
wert ist als unsigned char deklariert.

von Alex Trusk (Gast)


Lesenswert?

versuchs mal als "volatile unsigned char".
http://www.mikrocontroller.net/forum/list-1-1.html?filter=volatile

von Karl heinz B. (kbucheg)


Lesenswert?

Schon. Aber hats du den auch noch 'volatile' gemacht?

Zeig doch mal ein bischen mehr Code als bisher.
Ideal wäre es, wenn du soviel posten würde, dass wir das
theoretisch compilieren, in 2 ATMegas brennen und testen
könnten. Nimm aus deinem Pgm alles an Funktionalität raus,
was nicht unmittelbar mit der reinen Übertragung zu tun hat
und poste das mal. Aus einem Code-Schnipsel alleine ist es
meist nur sehr schwer möglich irgendwelche Dinge herauszulesen.

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.