- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 18 von 18

Thema: 72kHz / 32kHz

  1. #11
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2011
    Beiträge
    20
    Anzeige

    Powerstation Test
    Beim Tiny mit 9,6MHz klappt das nicht so einfach: 9600000/36000=266. Leider zuviel für den 8-Bit-Timer.
    das habe ich mir schon gedacht,

    ich habe mir wieder gedanken gemacht und rum gerechnet und mal sehen ob ich es richtig verstanden habe,
    folgendes kam raus:

    nehme ich die interne Taktfrequenz von 4,8kHz

    rechne ich 1,2MHz/72kHz =66 oder 67
    1,2Mhz durch 66 ergibt 72,7Hz die sollten für die Minesweeper Erweitung in Ordnung sein

    der Zähler wird wieder im CTC Betrieb betrieben und
    OCRA0= 256-(66:2)=223
    TCNT0=256-66+3("Für das Laden des Zählregisters")

    haut das so hin?
    Gruß aus Hamburg

  2. #12
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Aha, es lichtet sich. Ich habe nun deinen Spulenthread gefunden und das von Manf verlinkte PDF gelesen:
    http://www.produktinfo.conrad.com/da...ER_BAUSATZ.pdf

    Grundsätzlich sind wir auf dem richtigen Weg, denn die Variable count72kHz zeigt eindeutig, dass es sich um die 72kHz-Lib des asuro von der CD handelt. Diese Version 2.1 kann man hier runterladen: http://sourceforge.net/projects/asuro/files/AsuroLib/

    Daraus nun der Ausschnitt mit der Timerparametrierung und der ISR:
    Code:
    volatile unsigned char count72kHz;
    
    /* uses timer2 (36kHz for IR communication */
    /* counts falling and rising edge => 36kHz*2 = 72kHz */
    SIGNAL (SIG_OUTPUT_COMPARE2)
    {
    	count72kHz ++;
    }
    
    /* Init function Processor will be initalized to work correctly */
    void Init (void)
    {
    	//-------- seriell interface programmed in boot routine and already running -------
    	//  prepare 36kHz for IR - Communication
    	TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
    	OCR2  = 0x6E; // 36kHz @8MHz
    	TIMSK |= (1 << OCIE2); // 36kHz counter for sleep
    WGM21 gesetzt bedeutet CTC, COM20 bedeutet "Toggle OC2 on Compare Match", also Ausgangspin umschalten bei Match. CS20 schaltet den Prescaler aus, somit ergeben 0x6e oder 110 im OCR2-Register etwa 8000000/110= 72727 Matches pro Sekunde und ebensoviele Aufrufe der ISR. Da bei jedem Match der Ausgang getogglet wird, ergeben sich am OC2-Pin 36kHz.

    Hier mal ein Testprogramm, keine Ahnung ob das so funktioniert:
    Code:
    // Ansteuerung der Minesweeper-Erweiterung für den asuro mit einem Tiny13    1.9.2011 mic
    // Basis ist das Testprogramm aus der Anleitung Seite 10
    
    // Asuro:                           Tiny13:
    // Ausgang der 36kHz (OC2): 			PB1 (OC0B, Pin6)
    // Eingang für das Signal (INT0): 	PB0 (PCINT0, Pin5)
    // Ausgang für LED (PD6):           PB2 (Pin7)
    
    // Der Eingang ist wie beim asuro interruptfähig.
    
    #include <avr/io.h>
    #include <avr/interrupt.h>
    
    volatile unsigned char count72kHz;
    ISR(TIM0_COMPB_vect)
    {
    	count72kHz ++;
    }
    
    int main(void)
    {
    	TCCR0A = (0 << WGM00) | (1 << WGM01); // CTC-Mode
    	TCCR0A |= (1 << COM0B0) | (0 << COM0B1); // Toggle OC0B on Compare Match
    	TCCR0B = (0 << CS02) | (0 << CS01) | (1 << CS00); // kein prescaler!
    	TIMSK0 = (1 << OCIE0B); // Interrupt ein
    	OCR0B = 9600/72; // 9,6MHz/72kHz = 133,3
    	sei();
    
    	DDRB |= (1<<PB2) | (1<<PB1); // LED und 36kHz sind Ausgänge
    
    	unsigned char oscillation;
    
    	PORTB &= ~(1<<PB2); // LED aus
      	while(1)
      	{
    		count72kHz=0;
    		oscillation = 0;
    		while (count72kHz<100) {
    		// Detect low level
    		if ((PINB & (1<<PB0)) == 0) oscillation = 1;}
    		// If oscillator is running, no metal object is within
    		// range, so LED should be off
    		if (oscillation) PORTB &= ~(1<<PB2); else PORTB |= (1<<PB2); // LED schalten
    	}
    	return(0);
    }
    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #13
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2011
    Beiträge
    20
    super klasse das muss ich erstmal alles nach vollziehen und dann werde ich die Spule wickeln und alles mal Testen und messen und werde dann mal am Ende Bereicht erstatten wenns erwünscht ist
    aber vielen Dank war eine riesen Hilfe! wenn ich Fragen habe melde ich moch noch mal
    Gruß aus Hamburg

  4. #14
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Na dann: Viel Erfolg.

    der Zähler wird wieder im CTC Betrieb betrieben und
    OCRA0= 256-(66:2)=223
    TCNT0=256-66+3("Für das Laden des Zählregisters")
    CTC bedeutet, der Timer zählt von 0 bis zu dem Wert in OCR0X. Beim Erreichen von OCR0X startet er wieder bei 0 und der Interrupt wird ausgelöst. Das Zählregister TCNT0 muss dabei nicht korrigiert werden!

    Im normalen Modus (und auch im PWM-Mode) zählt der Timer bis zum Überlauf und startet dann wieder bei 0. Hier muss man die Anzahl der Zähltakte bis zum Überlauf berechen und gegebenfalls auch das Zählregister korrigieren. Diese Betriebsart verwenden wir aber nicht.

    Gruß

    mic
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #15
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2011
    Beiträge
    20
    CTC bedeutet, der Timer zählt von 0 bis zu dem Wert in OCR0X. Beim Erreichen von OCR0X startet er wieder bei 0 und der Interrupt wird ausgelöst. Das Zählregister TCNT0 muss dabei nicht korrigiert werden!
    also wenn der Zähler von dem Wert OCR0X auf 0 springt toggelt er den Ausgang und löst den Interrupt aus oder? aber da dies mit 72kHz getoggelt wird habe ich dann nicht 36kHz? ich brauche aber 72kHz oder wird der Minesweeper-Schwingkreis mit 36kHz betrieben?
    gruß aus Hamburg

  6. #16
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Hallo

    Der Schwingkreis wird mit 36kHz betrieben, da auch die 72kHz-Library des asuro am OC2-Pin 36kHz ausgibt. Normalerweise ist das ja die Trägerfrequenz für die IR-Kommunikation. Deshalb wird im Testprogramm aus der Anleitung der Timer beim asuro ganz normal mit Init() parametriert.

    Der Zugriff auf count72kHz gibt zwar bei neueren Libs (ab v2.3) eine Fehlermeldung, aber da sie im Testprogramm nur sicherstellt, das 100 Halbwellen erzeugt wurden um den Schwingkreis anzuregen, sollte auch ein schlichtes Sleep(100) bei der 72kHz-Variante ausreichen. Bei den aktuellen Libs wäre es entsprechend Sleep(50) für 100 Halbwellen. Da wir aber beim Tiny kein Sleep() haben, zählen wir die Halbwellen selbst mit unserem count72kHz. Die erzeugte Frequenz am OC0X bleibt aber in allen Fällen 36kHz.

    Gruß

    mic

    [Edit]
    Im asurowiki wurde der Code stillschweigend an die aktuellen Libs angepasst:
    http://www.asurowiki.de/pmwiki/pmwik...in/MineSweeper

    Die Schaltung wird definitiv mit 36kHz betrieben. Leider hat sich aber ein Denkfehler eingeschlichen:

    while (count36kHz<200)

    count36kHz zählt zwei Halbwellen, die Wartezeit fürs Einschwingen beträgt deshalb in dieser Version 400 Halbwellen. Richtiger, aber vielleicht nicht wirklich besser, wäre:

    while (count36kHz<50)
    Geändert von radbruch (01.09.2011 um 14:17 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  7. #17
    Neuer Benutzer Öfters hier
    Registriert seit
    13.07.2011
    Beiträge
    20
    ahhhh nun macht das ganze doch alles Sinn natoll dann habe ich ja die ganze Zeit was falsches gedacht undnun verstehe ich besten Dank für die doch so schwere Geburt
    Grußs aus Hamburg

  8. #18
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    62
    Beiträge
    5.799
    Blog-Einträge
    8
    Also ganz ehrlich, der ganze Aufwand bisher hat sich eigentlich nicht gelohnt:
    Der linke Teil der Schaltung aus Dioden und Kondensatoren dient zur Erzeugung einer (bezogen
    auf die Masse der Schaltung) negativen Versorgungsspannung. Das ist erforderlich, da die
    Spannung am Schwingkreis um Masse herum schwingt und damit sowohl positiv als auch negativ
    werden kann.
    Aha! Deshalb auch der gigantische C2 mit 100µF zwischen Vss und GND (mit + an GND!). Da kommt von den 36kHz gar nichts mehr an!

    Der Schwingkreis um die Spule/Kondensator steuert sich selbst:
    Aber wie beim Anschubsen einer Schaukel muss das zum richtigen Zeitpunkt passieren, sonst funktioniert es
    nicht. Die hier verwendete Schaltung macht das dadurch, dass sie proportional zur Spannung am Kondensator Strom in den Kondensator schiebt.
    (Alle Zitate aus der Anleitung.)

    Trotzdem was gelernt.

    [Edit]
    Einen ähnlichen "Trick" gibts auch beim SnakeVision. Dort wird aus den 36kHz per Ladungspumpe die Eingangsspannung für einen 5V-Spannungsregler (IC2, 78L05Z) erzeugt:
    http://www.produktinfo.conrad.com/da...uer_ARX_03.pdf
    Geändert von radbruch (01.09.2011 um 15:43 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Problem mit 32kHz Uhrenquarz am timer1
    Von FeiaDragon im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 29.08.2008, 22:03

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress