Externer Interrupt löst nach Sensorsignal Reset aus

Gast #3646447
Lesenswert?
• ▲
▼
Hallo Zusammen,

ich weiß es gibt schon viele Beiträge zu dem Thema nur hab ich leider 
noch keine passende Lösung gefunden.

Zu meinem System:
Es gibt einen Drucksensor der hängt am ADC und am INT0 und es gibt 4 
Pumpen die angesteuert werden. Ich möchte den µC solange er nicht 
benutzt wird in sleep idle legen und durch 2 ISRs aufwecken können. Die 
eine ist eine UART-ISR -> Funktioniert einwandfrei. Des zweite ist das 
Sensorsignal:
Meine Idee war, dass bei einer Flankenänderung der Ext Int0 ausgelöst 
wird -> µC wacht auf und erledigt seine Aufgaben am ADC (Interrupts 
derweil ge-"cli();"t. Funktioniert auch soweit, nur sobald die 
Interrupts wieder freigegeben werden, findet ein Reset statt, was ich 
natürlich nicht will :)

Kann mir bitte jemand meinen Fehler verraten oder mich schimpfen wenn 
meine Umsetzung bzw. Idee der Umsetzung totaler Misst ist, bin echt am 
Verzweifeln

Vielen Dank schonmal :)
Angehängte Dateien:
Gast #3646462
Lesenswert?
• ▲
▼
Der Code ist so nicht compilierbar.
1
void uart_WRITEC(char *s)
2
{  
3
  while(*s)
4
  {
5
    do              // Huch?
6
  {
7
  }                 // Huch? Hier ist die Funktion zuende
8
  while((UCSR0A & 0x20)==0);
9
  {                            // Huch? Wozu öffnende Klammer ausserhalb jeder Funktion?
10
    UDR0 = *s;
11
    s++;
12
  }                 
13
  }                // Huch? Schliessender als geschlossen geht garnicht.
14
}                  // Doppelhuch? Die Schliessende Klammer zu einem schon geschlossenen Nichts!

Korrigiere das bitte erstmal und auch die Einrückung.

Ganz höflich folgender Hinweis: Das ist keine feine Art, so einen Code 
zu posten. Lies mal den Netiquette-Artikel, bitte.
Gast #3646477
Lesenswert?
• ▲
▼
@Bitflüsterer: Werde das einrücken korrigieren, habe ich übersehen scusi

@Dietrich L.: Stimmt, den habe ich vergessen raus zu nehmen, hatte es 
vorher mit ADC-ISR probiert

man man scheiß copy-paste fehler, 1 Tag wegen so am Misst verhauen :(((

Vielen Dank, es geht ;)
Gast #3646521
Lesenswert?
• ▲
▼
Ups. Mein Fehler. Code ist jedenfalls an der von mir zitierten Stelle 
compilierbar. Habe eine öffnende für eine schliessende Klammer gehalten.
1
void uart_WRITEC(char *s)
2
{  
3
  while(*s)
4
  {
5
    do {
6
    } while((UCSR0A & 0x20)==0);
7
    {
8
      UDR0 = *s;
9
      s++;
10
    }                 
11
  }
12
}

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.