mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Propeller Display -> Wie über LuftSpule Daten übertragen?


Autor: Rene P. (icebair)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallöchen!
Ich hab mir in den letzten Tagen ein eigenes Propeller Display 
zusammengefrickelt. Solange ich die Daten für mein Bild direkt im µC 
speichere läuft auch schon alles wunderbar.
Die Primärspule bildet mit nem Kondensator einen Schwingkreis und wird 
per Mosfet bei ca. 19kHz betrieben indem ich 6V einfach ein und 
ausschalte.
Nun hatte ich auch eine Datenübertragung über den Lufttrafo geplant. 
Dazu habe ich einen Interrupt-Pin meines Atmega8 auf dem Rotor vor dem 
Gleichrichter mit der Sekudärspule verbunden. Beim normalen Betrieb 
kommt am Pin des µC nun an, was ich also Foto vom Oszi mit ins Bild 
kopiert habe.
Nun habe ich große Probleme von diesem Signal ordentliche Flanken als 
Interrupt zu verwenden um mir eine Art Manchester zu Programmieren und 
stehe deshalb seit längerem auf der Stelle...
Haben vielleicht ein paar erfahrene PropellerClock Bauer ein paar Tips? 
:-)

Rene

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm, die 19kHz sind für die Betriebsspannung, oder?

Dann pack mit einer anderen Frequenz einfach noch ein zusätzliches 
Datensignal mit drauf, (z.B. 30kHz da=>Bit 1, nicht da=>0)

Auf Sekundärseite mit Kondensator auskoppeln, und z.B. mit NE567 
detektieren (alternativ mit LC-Schwingkreis und ADC im µC)

Dann z.B. einfach auf den RS232-RX Eingang, oder 
manchester-Dekodieren...

/Ernst

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nunja, ich habe auch mal bzgl Energieübertragung mit Spulen 
experimentiert und das für nicht gut (genug) befunden. werd aber 
sicherlich bei Zeit weitermachen.
Als Datenübertragung hab ich jetzt eine optische Verbindung angesetzt. 
Die ist soweit schon getestet..

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
einstellbarer komperator und mit dem oszi abgleichen. hat bei mir 
funktioniert. allerdings verstehe ich das mit dem schwingkreis nicht. 
ich hab einfach nur die spannung per mosfet zerhackt und im 
sekundaerkreis vor dem gleichrichter abgegriffen. an welcher stelle hast 
du einen zusaetlichen kondensator?

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich übertrage bei mir die Daten optisch in der Spulenmitte per IR 
(Manchestercodiert).
Funktioniert tipptopp :)

Autor: Rene P. (icebair)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Alex.
Ich hab die Primärspule Parallel mit nem C. So habe ich einen wesentlich 
besseren Wirkungsgrad erhalten (Strom fließt auch mal in die andere 
Richtung durch die Spule). Inzwischen spiele ich aber auch mit dem 
Gedanken das ganze auf "einfaches Zerhacken" mit ner Freilaufdiose 
umzubauen um nen saubereres Signal zu bekommen.

Damit ich das mit dem Komparator auch richtig verstehe: Ich stelle den 
so ein, daß er gerade so beim Maximalwert der Spannung ne 1 ausgibt? 
Müsste ich mich mal ransetzen... Wenn das dann sauber funktioniert wär 
das was :-)

@Alle die optischen Weg vorschlagen: Ich würde gerne die Spule nutzen, 
allein um daraus zu lernen. Kenn mich in Analogen Schaltungs-bereichen 
kaum aus und das muss ich ändern.

@Ernst: Das mit dem aufmodulierten Signal ist würde ich als notlösung 
ausprobieren, da ich dazu noch an der Grundplatine rumfrickeln müsste, 
die auf anhieb so schön lief ;-)

Rene

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Inzwischen spiele ich aber auch mit dem
>Gedanken das ganze auf "einfaches Zerhacken" mit ner Freilaufdiose
>umzubauen um nen saubereres Signal zu bekommen.
genau so hab ichs gemacht. wirkungsgrad unter aller sau, aber es 
funktioniert.

>Damit ich das mit dem Komparator auch richtig verstehe: Ich stelle den
>so ein, daß er gerade so beim Maximalwert der Spannung ne 1 ausgibt?
>Müsste ich mich mal ransetzen... Wenn das dann sauber funktioniert wär
>das was :-)
ich hab das signal erst "normal" auf einen int-eingang gegeben, aber es 
wurde nicht richtig getriggert, weil der avr schon bei ~1.2-1.5V 
reagiert. mit einem komperator dazwischen konnte ich die schwelle 
einstellen. sollte aber auch mit dem internen funktionieren. ich hab 
einen externen genommen, weil ich fuer meine "nullpunkterkennung" mit 
cny70 einen weiteren komperator gebraucht habe. ein einfacher 
doppelopamp wie lm358 hat ausgereicht.

                      .---------------------------.
                      |                           |
          .------.    |              __         |
          |      |    |             |    |        |   |\
          |      |    |    +-+------|7805|---.    '---|+\
          C|     |    |    A A      |____|  .-.       |  >-
          C|     '----o----+ |        |     | |<------|-/
          C|     .---------(-+        |     | |       |/
          |      |         A A        |     '-'
          |      |         +-+--------o------'
          |      |
          '------'

(created by AACircuit v1.28.6 beta 04/19/05 www.tech-chat.de)

Autor: Rene P. (icebair)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So. Nun habe ich das an den Komparator gelegt und es scheint soweit ganz 
gut zu klappen.
Nun habe ich ein weiteres Problem. Irgendwie bekomme ich den Komparator 
Interrupt nicht zum laufen...
#include <avr/io.h>
#include <stdint.h>
#include <avr/interrupt.h>
#ifndef F_CPU
#define F_CPU 16000000    /* Oszillator-Frequenz in Hz */
#endif
[...]
/* Interrupt am Komparator */
ISR(ANALOG_COMP_vect)
{ 
  PORTC = 0x00;
  PORTB = PINB ^ 0x02; // Wir toggeln die LED...
}

[...]
/* Main Funktion */ 
int main(void)
{

  ACSR |=  (1<<ACIS1) | (1<<ACIS0) | (1<<ACO); //Interrupt bei wechsel auf 1
  ACSR |= (1<<ACIE); //Komparator Interrupt aktivieren
  
  sei(); // Globale Interrupts aktivieren   

  /* Main Schleife */
  while (1)
  {

[...]
  }
}
Habe ich da irgendwas grundlegendes vergessen? Also der Komparator 
wechselt eindeutig. Habe das ACO-Signal mal 1:1 an einem Pin ausgeben 
lassen und das lief.

Autor: Alex Trusk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>PORTB = PINB ^ 0x02;
sollte das nicht besser
PORTB = PORTB ^ 0x02;
//oder eleganter
PORTB ^= 0x02;
heissen?


ausserdem fehlt in der main noch
DDRB |= 0x02;

...

Autor: Rene P. (icebair)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
mit
 PORTB = PORTB ^ 0x02;
hatte ich an anderer Stelle irgendwie Probleme. Da dachte ich, daß man 
PORTB nicht lesen kann...
Die Ausgänge sind auch richtig festgelegt.
(hab mich im CODE auf die teile beschränkt, die mit der 
Interruptauslösung zu tun haben. Wenn ich den Interrupt auf nen 
Timerinterrupt ändere toggelt die LED auch)

Also das Problem beschränkt sich ausschließlich auf die Aktivierung / 
Auslösung des Timer Interrupts und ich sehe nicht wo ich da nen falsches 
Bit gesetzt hab :-(

Autor: Rene P. (icebair)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab das Problem gefunden!
ISR(ANALOG_COMP_vect)

heißt beim Atmega8
ISR(ANA_COMP_vect)

Dessen war ich mir nicht bewusst.

Aber vielen Dank für die Hilfe!

René

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.