Hallo zusammen Hab grad nen sehr merkwürdiges Problem, arbeite grad mit nem Tiny25, war grad nen bissl am rumspielen mit C, dabei bin ich auf folgendes Phänomen gestoßen: Dieses Programm funktioniert wie es soll: (Bei Erde an PB3 geht PB4 aus) #include <avr/io.h> int main (void) { DDRB = 0b00010000; PORTB = 0b00001000; while ( PINB & (1<<PINB3) ) { PORTB = 0b00011000; } PORTB = 0b00001000; while(1) { /* "leere" Schleife*/; } /* wird nie erreicht */ return 0; } Dieses jedoch nicht: (Bei Erde an PB3 geht PB4 an) #include <avr/io.h> int main (void) { DDRB = 0b00010000; PORTB = 0b00001000; while ( PINB & (1<<PINB3) ) { PORTB = 0b00001000; } PORTB = 0b00011000; while(1) { /* "leere" Schleife*/; } /* wird nie erreicht */ return 0; } Hier ist von Anfang an PB4 an, das soll aber erst passieren, wenn die Bedingung in der Schleife falsch wird. Jemand ne Idee?
1 | #include <avr/io.h> |
2 | |
3 | int main (void) |
4 | {
|
5 | // Hardware initialisieren. Reihenfolge bzgl. Hardwareaufbau beachten
|
6 | PORTB = (1<<PINB4) | (1<<PINB3); |
7 | // PB4 HIGH, d.h. low active LED AUS
|
8 | // PB3 interner Pullup aktiviert
|
9 | DDRB = (1<<PINB4); // PB4 Output, PB3 Input |
10 | |
11 | // unendliche Arbeitsschleife
|
12 | while(1) { |
13 | while ( PINB & (1<<PINB3) ) |
14 | {
|
15 | // Solange PB3 NICHT an GND hängt
|
16 | PORTB = (0<<PINB4) | (1<<PINB3); // PB4 LOW, d.h. low active LED AN |
17 | }
|
18 | PORTB = (1<<PINB4) | (1<<PINB3); // PB4 HIGH, d.h. low active LED AUS |
19 | }
|
20 | |
21 | /* wird nie erreicht */
|
22 | return 0; |
23 | }
|
Hallo, das kann passieren, wenn beim Einschalten der Controller schon los läuft, während die Versorgungsspannung noch nicht ausreicht, um HIGH an PB4 zu erkennen. Bau eine kleine Startup-Verzögerung ein! Grüße, Peter
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.