Forum: Compiler & IDEs Probleme beim Einschalten einer LED


von Andreas G. (cpl)


Lesenswert?

Hi!

Ich habe einen Fototransistor an einen Atmega8 angehängt und lese die 
Spannung per ADC aus. Wenn die Spannung einen gewissen wert 
unterschreitet, soll eine LED angeschaltet werden.

Beim Start des Programms (Fotosensor nicht beleuchtet->geringe Spannung 
am ADC) leuchtet die LED bereits, wird der Sensor beleuchtet geht die 
LED aus, wenn ich dann jedoch die Beleuchtung des Fotosensors wieder 
beende, geht die LED NICHT wieder an(obwohl der codeabschnitt in dem das 
passieren sollte durchlaufen wird, siehe log-datei). Was mache ich da 
falsch? wieso schaltet "if (result<30) {uart_puts ("    LED ist an   "); 
PORTC |= (0<<PC5);   };" die LED nicht wieder an??

grüße
andy
1
#include <avr/io.h>       
2
#include <stdint.h>     
3
#define FOSC 1843200     
4
#define BAUD 9600             
5
#define MYUBRR FOSC/16/BAUD-1 
6
#include <stdlib.h>
7
#define PI 3.141592654;  
8
uint8_t EINGELESENEBITS;  
9
10
int main (void) 
11
  {
12
        ////////////////////////*Leuchtdiode*/////////////////////////////
13
    DDRC |= (1<<DDC5);                                             
14
    ////////////////////////* UART *//////////////////////////////////////////////
15
    USART_Init ( MYUBRR );               
16
    ////////////////////////* ADC *///////////////////////////////////////////////
17
  while(1)
18
    {
19
      uint16_t result = 0;
20
      DDRC |= (1<<DDC4);                
21
      ADMUX = 0b100;                              
22
      ADMUX |= (1<<REFS1) | (1<<REFS0);            
23
      ADCSRA = (1<<ADEN) | (1<<ADPS1) |(1<<ADPS0);                                         
24
      ADCSRA |= (1<<ADSC);                         
25
      while ( ADCSRA & (1<<ADSC) ) 
26
        {
27
            ;
28
        }
29
      result = ADCW;  
30
      ADCSRA &= ~(1<<ADEN);                     
31
      //Ausgabe an USART
32
      char ASCII[15];
33
         utoa(result, ASCII, 10);
34
      uart_puts ("Ergebnis Spannungsmessung:   "); 
35
         uart_puts(ASCII); 
36
      uart_puts (" Volt"); //Natürlich müssten die Werte noch in die tats. Spannung umgerechnet werden!!!
37
      //LED einschalten, wenn Lichtstärke gross
38
      if (result<30) {uart_puts ("    LED ist an   ");  PORTC |= (0<<PC5);   };
39
      if (result>30) {uart_puts ("    LED ist aus  ");  PORTC |= (1<<PC5);   };
40
            uart_puts("\r\n");   //Zeilenumbruch
41
    }
42
43
  //////////////////////////////////////////////////////////////////////////////
44
45
  while(1) 
46
    {     
47
    }
48
49
  return 0;                        
50
}
51
52
53
//===================================== 
54
//====== USART initialisieren ========= 
55
//=====================================
56
void USART_Init( unsigned int ubrr) 
57
  {                     
58
    UBRRL = 8;                                
59
    UCSRB = (1<<RXEN)|(1<<TXEN);              
60
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); 
61
  }
62
63
64
65
//=====================================
66
//====== USART-Sendefunktion ========== 
67
//=====================================
68
void uart_puts (char *s) 
69
  {
70
71
      while (*s)
72
      {   
73
          uart_putc(*s);
74
          s++;
75
      }
76
  }
77
78
79
80
//=====================================
81
//====== USART-Sendefunktion ==========  
82
//=====================================
83
void uart_putc(unsigned char c) 
84
  {
85
86
      while (!(UCSRA & (1<<UDRE)))  
87
        {
88
        }                             
89
      UDR = c;                      
90
  }

Log-Datei: (habe ich der übersichtlichkeit halber etwas gekürzt)

(...)
Ergebnis Spannungsmessung:   14 Volt    LED ist an
Ergebnis Spannungsmessung:   14 Volt    LED ist an
Ergebnis Spannungsmessung:   14 Volt    LED ist an
Ergebnis Spannungsmessung:   39 Volt    LED ist aus
Ergebnis Spannungsmessung:   41 Volt    LED ist aus
Ergebnis Spannungsmessung:   44 Volt    LED ist aus
Ergebnis Spannungsmessung:   44 Volt    LED ist aus
(...)
Ergebnis Spannungsmessung:   48 Volt    LED ist aus
Ergebnis Spannungsmessung:   48 Volt    LED ist aus
Ergebnis Spannungsmessung:   47 Volt    LED ist aus
Ergebnis Spannungsmessung:   22 Volt    LED ist an
Ergebnis Spannungsmessung:   15 Volt    LED ist an
Ergebnis Spannungsmessung:   12 Volt    LED ist an
 (...)
Ergebnis Spannungsmessung:   13 Volt    LED ist an
Ergebnis Spannungsmessung:   12 Volt    LED ist an
Ergebnis Spannungsmessung:   12 Volt    LED ist an
(...)

von Sonnenschein (Gast)


Lesenswert?

löschen geht anderst:
1
if (result<30) {uart_puts ("    LED ist an   ");  PORTC &= ~(1<<PC5);   };

Schau mal bei Bitmanipulationen ;)

avr

von Andreas G. (cpl)


Lesenswert?

Ich sehe, ich muss an meinen grundlagen arbeiten!
Danke!!

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.