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 :)
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.
Maximilian schrieb:1 | /* enable ADC interrupt */
|
2 | ADCSRA |= (1<<ADIE); |
Wo ist die zugehörige Interrupt-Routine? Gruß Dietrich
@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 ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.