Forum: Mikrocontroller und Digitale Elektronik Externer Interrupt löst nach Sensorsignal Reset aus


von Maximilian (Gast)


Angehängte Dateien:

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 :)

von Bitflüsterer (Gast)


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.

von Dietrich L. (dietrichl)


Lesenswert?

Maximilian schrieb:
1
/* enable ADC interrupt */
2
  ADCSRA |= (1<<ADIE);

Wo ist die zugehörige Interrupt-Routine?

Gruß Dietrich

von Maximilian (Gast)


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 ;)

von Bitflüsterer (Gast)


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
}

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.