Hallo, Seit langen mal wieder hier ! Atmel AtTiny13 mit 9,6 MHz interner Oszillator Mit dem Zeichen U (0x55) initilisiert sich der Software URAT (Auto BAUDing 300 - 115200). Erwartete Antwort kommt ! Mit dem Zeichen 0 (0x30) kann ich dann den logischen Zustand vom PB2 bis PB5 (nicht wirklich PB5 da noch Reset) lesen (Pull-Up setzen) Mit dem Zeichen 8 (0x38) starte ich einen Sreamread der Ports. Klappt besser als ich es mir erträumt hätte. Bei allen BAUT-Raten bis jetzt keine Bitfehler. Nun das Ganze mit AD-Wandler, und das geht eben nicht mehr. Mit dem Zeichen 4 (0x34). Ausgabe ist im Test auf o und k vorbelegt. Die Routine gibt aber nicht mal die geechote 4 aus. NextAD: inc r16 out ADMUX,r16 lsr r18 brcc Not2read ;LowNoiseAD zerstört r16 und r17 ldi r16, 0<<PUD|1<<ISC00|0<<ISC01|1<<SE|0<<SM1|1<<SM0 out MCUCR,r16 in r16,ADCSRA cbr r16,0b11111000 sbr r16,1<<ADEN|1<<ADSC|0<<ADATE|0<<ADIF|1<<ADIE out ADCSRA,r16 sleep ldi r16, 0<<PUD|1<<ISC00|0<<ISC01|1<<SE|0<<SM1|0<<SM0 out MCUCR,r16 in r16,ADCH ldi r16,'o' rcall SendData in r17,ADCL in r16,ADMUX Not2read: lsr r19 lsr r19 or r19,r17 brcc NextAD mov r16,r19 ldi r16,'k' rcall SendData ret Kommentiere ich aber die follgenden Zeilen aus, ldi r16, 0<<PUD|1<<ISC00|0<<ISC01|1<<SE|0<<SM1|1<<SM0 out MCUCR,r16 in r16,ADCSRA cbr r16,0b11111000 sbr r16,1<<ADEN|1<<ADSC|0<<ADATE|0<<ADIF|1<<ADIE out ADCSRA,r16 sleep ldi r16, 0<<PUD|1<<ISC00|0<<ISC01|1<<SE|0<<SM1|0<<SM0 out MCUCR,r16 so erhalte ich beim Senden des Zeichens 4 die erwartete Antwort 4ook . Was passiert hier. Ich müsse doch selbst wenn der Controller stehen bleibt trotzdem wenigstens die 4 angezeigt bekommen da das StopBit ja noch ausgegeben wird. Jemand ne Idee? Liebe Grüße Christof
moin erstmal würde ich die DCD,DTR,DSR Ausgänge der RS232 jeweils über eine eigene Diode zusammenfassen , da es passieren kann das diese unterschiedliche Pegel aufweisen (Initialisierung) mfg
Christof Rieger schrieb: > Danke ! > Kann aber nicht passieren, da nur Einer ein Ausgang ist Das ist das Problem: die Eingänge fressen Dir den Strom weg. (vermutlich bricht die Spannung ein sobald der ADC aktiviert wird). Wenn Du am PC die Schnittstelle auf "no handshake" stellst brauchst du die Eingänge nicht. -> DSR und DCD kann entfernt werden. Gruß Anja
O.K. Das müssten aber die Kondensatoren abfangen. Mindestens die 4 muss noch kommen.
Hallo Anja, ich habe nochmal die Gegenprobe gemacht.
1 | ;LowNoiseAD zerstört r16 und r17 |
2 | ldi r16, 0<<PUD|1<<ISC00|0<<ISC01|1<<SE|0<<SM1|1<<SM0 |
3 | out MCUCR,r16 |
4 | in r16,ADCSRA |
5 | cbr r16,0b11111000 |
6 | sbr r16,1<<ADEN|1<<ADSC|0<<ADATE|0<<ADIF|0<<ADIE |
7 | out ADCSRA,r16 |
8 | ; sleep |
9 | ldi r16, 0<<PUD|1<<ISC00|0<<ISC01|1<<SE|0<<SM1|0<<SM0 |
10 | out MCUCR,r16 |
11 | in r16,ADCH |
Sprich den AD-Wandler gestartet aber den Interrupt deaktiviert und den sleep deaktiviert. Das dürfte sogar einen höheren Stromverbrauch zur Folge haben, da der Core weiter arbeitet. Die erwartete Antwort von 4ook erfolgt dann beständig. Irgend wie muss durch den sleep der auf den AD-Wandler wartet, das ganze Timing zu zerrissenwerden, dass der Software URAT außer Tritt kommt. Ich kann mir aber nicht erklären warum. Denn bis zum Start des AD-Wandlers ist das Senden/Empfangen der 4 bis auf die Wartezeit ende StopBit abgeschlossen. Die Nachfollgen Sende-Routine stellt sicher, dass sie nicht eher Daten ausgibt bevor nicht mindestens die Dauer eines Bits für das Stopbit vergangen ist. Außerdem ist zu keiner Zeit mehr als ein Interrupt scharfgeschaltet. Ich finde den Gedankenfehler nicht ! LG Christof PS: Wenn jemand Muse hat kann er die Schaltung ja mal nachbauen. Wie gesagt das einlesen der Digitalen Zustände klappt super. Zur Initialisierung sendet man einfach nach der Aktivierung der RS232 ein U (0x55) die Schaltung antwortet dann bei: 115200 und 57600 mit 0 (0x30) 38400 mit 1 (0x30) ... 300 mit 8 (0x38) Sendert man dann Binär 0b PPPP0000 (P=0 PullUp aus, P=1 PullUp ein) so bekommt man als EchoAntwort 0b WWWW0000 (W=Logischer Pegel des zugehörigen Pins [PB2|PB5|PB3|PB4] Sendet man Binär 0b PPPP1000 wir als Antwort ein 8-Bit Echo und dann ein endlos Stream gesendet. Ergebnis: zu t -0,5 | zu t -1 [PB2|PB5|PB3|PB4|PB2|PB5|PB3|PB4] Durch schließen der Schnittstelle wird der Stream gestopt.
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.