- LiFePO4 Speicher Test         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: AD wandler bei ATmega16

  1. #11

    code für den ad wandler

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Code:
    #include <mega16.h>
    
    #define ADC_VREF_TYPE 0x20
    // ADC interrupt service routine
    interrupt [ADC_INT] void adc_isr(void)
    {
    unsigned char adc_data;
    // Read the 8 most significant bits
    // of the AD conversion result
    
    adc_data=ADCW;
    // Place your code here
    
    }
    
    // Declare your global variables here
    
    
    void main(void)
    {
    // Declare your local variables here
    
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=Out Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=0 State0=T 
    PORTA=0x00;
    DDRA=0x02;
    
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTB=0x00;
    DDRB=0x00;
    
    // Port C initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
    PORTD=0x00;
    DDRD=0x00;
    
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x00;
    TCNT0=0x00;
    OCR0=0x00;
    
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    // Input Capture on Falling Edge
    TCCR1A=0x00;
    TCCR1B=0x00;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    // Analog Comparator Output: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // ADC initialization
    // ADC Clock frequency: 125,000 kHz
    // ADC Voltage Reference: AREF pin
    // ADC High Speed Mode: Off
    // ADC Auto Trigger Source: None
    // Only the 8 most significant bits of
    // the AD conversion result are used
    ADMUX=ADC_VREF_TYPE;
    ADCSRA=0x8D;
    SFIOR&=0xEF;
    
    // Global enable interrupts
    #asm("sei")
    
    while (1)
          {
          // Place your code here
    
          };
    }
    PS : ich habe aber keinen code geschrieben den code den du hier siehst hat der (durch die voreinstellung von mir) compiler selber erzeugt

    ich habe ausserdem an AREF und AVCC 5V anliegen sowie GND mit masse verbunden und an ADC0 (pin40) zusätzlich noch 2.5V angelegt. muss ich jetzt dazu den code noch ändern oder kann ich jetzt schon ein ergebnis erhalten??? wenn ja wie?

    mfg

    SFR

  2. #12
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    44
    Beiträge
    464
    Mein Code ist in Bascom geschrieben.
    Mit C kann ich auch nichts anfangen.

    Vorteile von Basic bzw Bascom:

    -High Levelbefehle wie "Start ADC" erleichtern das Programmieren in der Lernphase erheblich.

    -Fast keine Register müssen in Bascom direkt gesetzt werden.

    -Für kleine Versuche ist die Demoversion ausreichend und gut dokumentiert.

    Um die Struktur der allgemeinen efizienten Programmierung zu erlernen
    kann ich Bascom nur empfehlen. Habe auch damit angefangen und programmiere jetzt den MEga128 mit etwa 30Kb Code.
    Außerdem finde ich auch, dass Bascom, sauber programmiert übersichtlicher ist als C.
    Der einzigeGrund, warum ich C lernen würde ist die Tatsache, dass man in C komplexere Programme schreiben kann, die aber weit von denen eines Anfängers entfernt sind.

    MFG

    Vader

  3. #13
    hier mein code in bascom:

    Code:
    '--------------------------------------------------------------------
    '                  ADC.BAS
    '  demonstration of GETADC() function for 8535 micro
    '  Getadc() will also work for other AVR chips that have an ADC converter
    '--------------------------------------------------------------------
    $regfile = "m16def.dat"
    
    'configure single mode and auto prescaler setting
    'The single mode must be used with the GETADC() function
    
    'The prescaler divides the internal clock by 2,4,8,15,32,64 or 128
    'Because the ADC needs a clock from 50-200 KHz
    'The AUTO feature, will select the highest clockrate possible
    Config Adc = Single , Prescaler = Auto
    'Now give power to the chip
    Start Adc
    
    'With STOP ADC, you can remove the power from the chip
    'Stop Adc
    
    Dim W As Word , Channel As Byte
    
    Channel = 0
    'now read A/D value from channel 0
    Do
      W = Getadc(channel)
      Print "Channel " ; Channel ; " value " ; W
      Incr Channel
      If Channel > 7 Then Channel = 0
    Loop
    End
    
    'The new M163 has options for the reference voltage
    'For this chip you can use the additional param :
    'Config Adc = Single , Prescaler = Auto, Reference = Internal
    'The reference param may be :
    'OFF      : AREF, internal reference turned off
    'AVCC     : AVCC, with external capacitor at AREF pin
    'INTERNAL : Internal 2.56 voltage reference with external capacitor ar AREF pin
    
    'Using the additional param on chip that do not have the internal reference will have no effect.
    wieso schreibt er nichts in die register ADCH und ADCL hinein ?

    mfg

    sfr

  4. #14
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    28.02.2005
    Ort
    Salzburg
    Alter
    44
    Beiträge
    464
    Du darfst den Code nicht irgendwie einfach kopieren.
    die baudrate hast vergessen und keine geschwindigkeit deklariert=$crystal
    Hier der korregierte Code.
    Probier aus.
    Bei deinem und bei meinem Code kommt vorerst nur der Binärwert raus, da die Umrechnung in Volt noch fehlt.
    Das können Werte von 0 bis 1024 sein.



    Code:
    $regfile = "m16def.dat"
    $crystal = 3000000
    $baud = 9600
    
    
    Config Adc = Single , Prescaler = Auto
    
    
    Start Adc
    
    '
    
    Dim W As Word , Channel As Byte
    
    Channel = 0
    
    Do
      W = Getadc(channel)
      Print "Channel " ; Channel ; " Wert= " ; W
      Incr Channel
      If Channel > 7 Then Channel = 0
    Loop
    End

  5. #15
    "...die zu messende Spannung darf maximal so gross wie die Referenzspannung sein."

    sonst passiert was?

    dankbar für antworten

  6. #16
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    07.02.2005
    Ort
    Wels
    Alter
    63
    Beiträge
    512
    erm......
    du legst maximal +5v an und dann kannst du per spannungsteiler messen.
    leg mehr an und der µC raucht dir ab
    mfg knacki

    //edit:

    poti, links +5v, rechts gnd, mitte an den adc-port, dann kannst du werte auslesen.
    ist das verständlicher für den anfang?

  7. #17
    das heißt wenn ich die interne 2,56V Referenz benutze, darf am pin nicht mehr als eben diese 2,56V anliegen, richtig?
    wenn dort mal eben 5V anliegen war es die letzte messung?

    wär noch schön wenn ich wüßte unter welchem punkt im datenblatt dies beschrieben ist, bisher nix gefunden

    p.s.: folgendes Szenario liegt vor: Spannungsteiler, wenn ich aber den GND-seitigen widerstand entferne(aufsteckbarer Tempsensor), dann hab ich auf grund des hohen eingangswiderstandes des adc knapp 5V anliegen

  8. #18
    ok, jzt hab ichs gefunden

Seite 2 von 2 ErsteErste 12

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress