mikrocontroller.net

Forum: Compiler & IDEs Probleme beim Einschalten einer LED


Autor: Andreas G. (cpl)
Datum:

Bewertung
0 lesenswert
nicht 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
#include <avr/io.h>       
#include <stdint.h>     
#define FOSC 1843200     
#define BAUD 9600             
#define MYUBRR FOSC/16/BAUD-1 
#include <stdlib.h>
#define PI 3.141592654;  
uint8_t EINGELESENEBITS;  

int main (void) 
  {
        ////////////////////////*Leuchtdiode*/////////////////////////////
    DDRC |= (1<<DDC5);                                             
    ////////////////////////* UART *//////////////////////////////////////////////
    USART_Init ( MYUBRR );               
    ////////////////////////* ADC *///////////////////////////////////////////////
  while(1)
    {
      uint16_t result = 0;
      DDRC |= (1<<DDC4);                
      ADMUX = 0b100;                              
      ADMUX |= (1<<REFS1) | (1<<REFS0);            
      ADCSRA = (1<<ADEN) | (1<<ADPS1) |(1<<ADPS0);                                         
      ADCSRA |= (1<<ADSC);                         
      while ( ADCSRA & (1<<ADSC) ) 
        {
            ;
        }
      result = ADCW;  
      ADCSRA &= ~(1<<ADEN);                     
      //Ausgabe an USART
      char ASCII[15];
         utoa(result, ASCII, 10);
      uart_puts ("Ergebnis Spannungsmessung:   "); 
         uart_puts(ASCII); 
      uart_puts (" Volt"); //Natürlich müssten die Werte noch in die tats. Spannung umgerechnet werden!!!
      //LED einschalten, wenn Lichtstärke gross
      if (result<30) {uart_puts ("    LED ist an   ");  PORTC |= (0<<PC5);   };
      if (result>30) {uart_puts ("    LED ist aus  ");  PORTC |= (1<<PC5);   };
            uart_puts("\r\n");   //Zeilenumbruch
    }

  //////////////////////////////////////////////////////////////////////////////

  while(1) 
    {     
    }

  return 0;                        
}


//===================================== 
//====== USART initialisieren ========= 
//=====================================
void USART_Init( unsigned int ubrr) 
  {                     
    UBRRL = 8;                                
    UCSRB = (1<<RXEN)|(1<<TXEN);              
    UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0); 
  }



//=====================================
//====== USART-Sendefunktion ========== 
//=====================================
void uart_puts (char *s) 
  {

      while (*s)
      {   
          uart_putc(*s);
          s++;
      }
  }



//=====================================
//====== USART-Sendefunktion ==========  
//=====================================
void uart_putc(unsigned char c) 
  {

      while (!(UCSRA & (1<<UDRE)))  
        {
        }                             
      UDR = c;                      
  }




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
(...)

Autor: Sonnenschein (Gast)
Datum:

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

Schau mal bei Bitmanipulationen ;)

avr

Autor: Andreas G. (cpl)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich sehe, ich muss an meinen grundlagen arbeiten!
Danke!!

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.