Hi, wie krieg ich es hin auf einem einzelnen PIN einen CHAR Bit-weise auszugeben? Ich brauche das um Daten seriell an den D/A-Wandler zu übergeben, die CLK des D/A-Wandler ist gleich dem Timer1 und ist auf 64kHz gestellt. Jetzt soll bei jedem auslösen des Timer1 1 Bit dieses Chars übergeben werden. Gruß Sebastian
Gast
#1072204
Welche Programmiersprache benutzt du? Assembler, Bascom, C oder anderes?
Gast
#1072217
char c;
while (c) {
pin = c & 0x80; // LSB first
c *= 2;
}
Gast
#1072219
ne, blödsinn
char c;
while (c) {
pin = c & 0x80; // LSB first
c = c << 1;
}
Gast
#1072220
ne, blödsinn
char c;
while (c) {
pin = c & 0x80; // MSB first
c = c << 1;
}
Mal schnell hingeschrieben für 'nen AVR. Sollte so gehen, am besten nachvollziehen um eventuelle Flüchtigkeitsfehler zu eliminieren. Die Umsetzung auf Dein Timer Problem schaffst Du jetzt sicherlich selbst.
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 | |
Gast
#1072228
Naja, seine ISR wird ja für jedes Bit einmal aufgerufen. Somit sollte das eigentlich ja so aussehen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
Allerdings ist der Overhead gewaltig! Ich würde die ISR mit 8kHz aufrufen lassen, dann stimmen auch die obigen Posts mit der Schleife. Volker
Danke für die super schnelle Antwort, hab auch alles soweit verstanden, habe allerdings noch eine allgemine Frage. Bei dem Befehl: DTA |= (1<<DATABIT); bzw. vegleichbar PORTB |= (1<<PD0) Wird eigentlich auch eine 1 durch das PORTB Register geschoben oder wird direkt das Bit PD0 auf High gelegt? EDIT: Vielleicht sollte ich dabei sagen das ich zwar den D/A-Wandler synchron zum Timer1 laufen lassen, allerdings rufe ich die Ausgabefunktion für die Bits nicht in der ISR Routine auf.
Nur das Bit wird auf 1 gelegt. Es wird nichts durch PORTB geschoben. STB
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.