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
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
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..
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?
Ich übertrage bei mir die Daten optisch in der Spulenmitte per IR (Manchestercodiert). Funktioniert tipptopp :)
@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
>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)
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.
>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; |
...
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 :-(
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.