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


von Rene P. (icebair)


Angehängte Dateien:

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

von Εrnst B. (ernst)


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

von Matthias (Gast)


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

von Alex Trusk (Gast)


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?

von Mario (Gast)


Lesenswert?

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

von Rene P. (icebair)


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

von Alex Trusk (Gast)


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)

von Rene P. (icebair)


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...
1
#include <avr/io.h>
2
#include <stdint.h>
3
#include <avr/interrupt.h>
4
#ifndef F_CPU
5
#define F_CPU 16000000    /* Oszillator-Frequenz in Hz */
6
#endif
7
[...]
8
/* Interrupt am Komparator */
9
ISR(ANALOG_COMP_vect)
10
{ 
11
  PORTC = 0x00;
12
  PORTB = PINB ^ 0x02; // Wir toggeln die LED...
13
}
14
15
[...]
16
/* Main Funktion */ 
17
int main(void)
18
{
19
20
  ACSR |=  (1<<ACIS1) | (1<<ACIS0) | (1<<ACO); //Interrupt bei wechsel auf 1
21
  ACSR |= (1<<ACIE); //Komparator Interrupt aktivieren
22
  
23
  sei(); // Globale Interrupts aktivieren   
24
25
  /* Main Schleife */
26
  while (1)
27
  {
28
29
[...]
30
  }
31
}
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.

von Alex Trusk (Gast)


Lesenswert?

>PORTB = PINB ^ 0x02;
sollte das nicht besser
1
PORTB = PORTB ^ 0x02;
2
//oder eleganter
3
PORTB ^= 0x02;
heissen?


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

...

von Rene P. (icebair)


Lesenswert?

mit
1
 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 :-(

von Rene P. (icebair)


Lesenswert?

Hab das Problem gefunden!
1
ISR(ANALOG_COMP_vect)

heißt beim Atmega8
1
ISR(ANA_COMP_vect)

Dessen war ich mir nicht bewusst.

Aber vielen Dank für die Hilfe!

René

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.