Probleme beim Einschalten einer LED

OP #1683341
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
(...)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.