www.mikrocontroller.net

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


Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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);
    }

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist "wert" als volatile deklariert?

Autor: Basti (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Alex,
wert ist als unsigned char deklariert.

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
versuchs mal als "volatile unsigned char".
http://www.mikrocontroller.net/forum/list-1-1.html...

Autor: Karl heinz Buchegger (kbucheg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.