- 12V Akku mit 280 Ah bauen         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: ADC und ATmega 8

  1. #11
    Erfahrener Benutzer Robotik Visionär Avatar von Hubert.G
    Registriert seit
    14.10.2006
    Ort
    Pasching OÖ
    Beiträge
    6.220
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Die Simulation sagt das es OK ist.
    Was meinst du mit (habe 16MHz an XTAL1 + 2)
    Grüsse Hubert
    ____________

    Meine Projekte findet ihr auf schorsch.at

  2. #12
    Benutzer Stammmitglied
    Registriert seit
    10.01.2009
    Beiträge
    30
    mit diesem code funktioniert es nun:

    Code:
    #include <avr/io.h>
    
    int main(void)
    {
    	DDRD = 0xFF;
    	while (1)
    	{
    		  uint8_t i;
    		  uint16_t result;
    		  int i2 = 60;
    		  ADMUX = (0<<REFS1)|(1<<REFS0);                      // Kanal waehlen
    		  ADMUX |= (1<<REFS1) | (1<<REFS0); // interne Referenzspannung nutzen
    
    		 
    		  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);    // Frequenzvorteiler 
    									   // setzen auf 8 (1) und ADC aktivieren (1)
    		 
    		  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
    			 also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
    		  ADCSRA |= (1<<ADSC);              // eine ADC-Wandlung 
    		  while ( ADCSRA & (1<<ADSC) ) {
    			 ;     // auf Abschluss der Konvertierung warten 
    		  }
    		  result = ADCW;  // ADCW muss einmal gelesen werden,
    						  // sonst wird Ergebnis der nächsten Wandlung
    						  // nicht übernommen.
    		 
    		  /* Eigentliche Messung - Mittelwert aus 4 aufeinanderfolgenden Wandlungen */
    		  result = 0; 
    		  
    
    		  for( i=0; i<i2; i++ )
    		  {
    			ADCSRA |= (1<<ADSC);            // eine Wandlung "single conversion"
    			while ( ADCSRA & (1<<ADSC) ) {
    			  ;   // auf Abschluss der Konvertierung warten
    			}
    			result += ADCW;		    // Wandlungsergebnisse aufaddieren
    			
    		  }
    		  ADCSRA &= ~(1<<ADEN);             // ADC deaktivieren (2)
    		 
    			result /= i2;                     // Summe durch vier teilen = arithm. Mittelwert
    			if (result < 128)
    			{				
    				PORTD = 0b10000000;
    			}
    			else if (result >= 128 && result < 256)	
    			{
    				PORTD = 0b01000000;
    			}
    			else if (result >= 256 && result < 384)	
    			{
    				PORTD = 0b00100000;
    			}
    			else if (result >= 384 && result < 512)	
    			{
    				PORTD = 0b00010000;
    			}
    			else if (result >= 512 && result < 640)	
    			{
    				PORTD = 0b00001000;
    			}
    			else if (result >= 640 && result < 768)	
    			{
    				PORTD = 0b00000100;
    			}
    			else if (result >= 768 && result < 896)	
    			{
    				PORTD = 0b00000010;
    			}
    			else
    			{
    				PORTD = 0b00000001;
    			}
    	}
    	return 1;
    }
    mit den 16 MHz hab ich meinen Quarz gemeint^^

  3. #13
    Neuer Benutzer
    Registriert seit
    12.06.2009
    Ort
    Malmedy
    Alter
    39
    Beiträge
    2
    ich glaub du hast auch vergessen den PORTC als eingang zu definieren

  4. #14
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    11.12.2007
    Ort
    weit weg von nahe Bonn
    Alter
    39
    Beiträge
    3.416
    das brauch man nicht, der ist standardmäßig auf input so wie alles was nciht initialisiert wird

Seite 2 von 2 ErsteErste 12

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress