Hallo ich möchte ein Byte an BORTB PB0 ausgeben den Takt kann ich dann selbst bestimmen. ATmega644 8MHz
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
|
Anzeige
|
Byte an Pin ausgeben?Hallo ich möchte ein Byte an BORTB PB0 ausgeben den Takt kann ich dann selbst bestimmen. ATmega644 8MHz
F. H. schrieb: > for (i = 0; i < 7; ++i) > { > _delay_us(500); > > return(code << i); // Alle 500µSec schieben > > } Die Schleife wird exakt 1 mal durchlaufen. Bei return verschwindet die in die aufrufende Routine. F. H. schrieb: > while(1) > { > _delay_us(250); > ~takt; > > return(1); > } Das gleiche hier auch. Außerdem hat folgendes keinerlei Auswirkung: F. H. schrieb: > ~takt; F. H. schrieb: > Hallo ich möchte ein Byte an BORTB PB0 ausgeben den Takt kann ich dann > selbst bestimmen. Aber so doch nicht. Nach 250µs wird PB0 auf 1 gesetzt. Mehr macht dein Programm nicht. Kann man auch einfacher lösen:
Um in C etwas zu programmieren, brauchst du auch Kenntnisse in C. Deine "return-Konstruktionen" zeigen aber, daß diese gegen Null tendieren. So wird das nichts. mfg. Thomas Eckmann schrieb: > Um in C etwas zu programmieren, brauchst du auch Kenntnisse in C. Deine > "return-Konstruktionen" zeigen aber, daß diese gegen Null tendieren. > So wird das nichts. Karl Heinz raet ab dann immer dazu sich ein C Buch anzuschaffen. Hi Ich habe eure Vorschläge zu herzen genommen und mal einen neuen Ansatz versucht, ich benutze jetzt den timerer0 für den Takt. Das mit dem Pin klappt auch durch DDRB = (1<<PB0); leider komme ich so nicht weiter ich denke das ich den Ansatz das mit nem XOR umzusetzen nicht gelingt http://de.wikipedia.org/wiki/Manchester-Code#Weiteres Zitat: "Praktisch kann die Codierung und Decodierung durch eine invertierte XOR-Verknüpfung des Trägers mit dem Nutzsignal erfolgen." Ich bitte um Ratschläge und weitere Anstöße.
Die Interrupt-Routine macht überhaupt nichts. Wozu überhaupt diese Aufteilung? Wenn die Bits mit einem bestimmten Timing ausgegeben werden sollen, dann gehört das Pinwackeln auch in den Timer-Interrupt. Dann wird das niedrigwertigste Bit von date invertiert, und dieser Wert soll dann an die 8 Pins von Port B 7 mal nacheinander ausgegeben werden, jeweils um eine Stelle nach links geschoben? Das macht alles keinen Sinn, mit Manchester-Code hat das auch überhaupt nichts zu tun. F. H. schrieb: > Ich habe eure Vorschläge zu herzen genommen Meinen aber nicht, denn das hier: F. H. schrieb: > ~takt; hat immer noch keinen Effekt. Hi Ja da hast du recht, ich habs gleich mal getestet und es hat wirklich keine aus Wirkung. Ich habe nun ein bisschen Rum gespielt, nun sehe ich auch was auf dem oszi nur sind die Rechtecke immer gleichlang und der Abstand zueinander ist auch immer gleich, nur die posizionen wandern es rutscht nach vorne und nach hinten.
Danke !! F. H. schrieb: > PORTB = (code << i); // Alle 500µSec schieben und ausgeben das ist Käse, zum einen warum den ganzen Port setzen? zum anderen wird beim erstem Mal das unterste Bite ausgegeben, dann 7x die 0! Nun wie könnte man das machen? F. H. schrieb: > Nun wie könnte man das machen? SChau dir halt mal die WIkipedia dazu an. Ein 0 Bit wird übertragen, in dem die Leitung auf 0 startet und nach der CLockzeit auf 1 wechselt. Ein 1 Bit wird übertragen, in dem die Leitung auf 1 startet und nach der Clockzeit auf 0 wechselt. Ist doch nicht so schwer. Das Diagramm auf Wikipedia zeigt ganz klar, wie Manchester-Code funktioniert. Deine 'Takt-Geschichte', an der du dich aufgehängt hast, die ist für den Empfänger relevant, bzw. wenn du den Manchester Code in Hardware anhand eines vorgegebenen Taktsignals erzeugen müsstest. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|