Hallole!
Ich hab mir vor kurzem nen MPX4115 (Drucksensor) geleistet, hab ihn auch zum laufen gebracht und hab den Luftdruck berechnen können.
Nun bin ich aber dabei den Code etwas platzsparender zu schreiben (und lass nachher die berechnungen vom PC machen).
Dabei will ich die USART und ADC Register von Hand konfigurieren (sprich UCSRx und UBRR bzw. ADMUX, ADCSRA). Allerdings will mir jetzt mein Mega8 keine Daten mehr schicken (kommt nix im Terminal-Programm an).
Im Anhang hab ich die komplette .bas Datei, hier noch ein paar ausschnitte vom Code:
Register setzen, Variablen deklarieren
-> Der Rest des Programms (ADCL/H lesen und an UDR geben)Code:$regfile = "m8def.dat" $crystal = 3686400 Dim Adhi As Byte 'Temp für ADCH Dim Adlow As Byte 'Temp für ADCL Dim Adcergebins As Word 'Endergebnis der AD-Wandlung (ADCH+ADCL) Dim B As Byte '"Merkbit" wenn Adlow und Adhi gelesen sind Ucsra = &B00000000 'U2X und MPCM aus Ucsrb = &B00011000 'UART Interrupts aus, TxD/RxD an, Char. Size=8Bit Ucsrc = &B10000110 'Register UCSRC wählen, Asynchron, Parity aus, 1 Stop Bit, Clock Polarity=0 Ubrr = 23 'Baudrate=9600, Double Speed aus Ddrc = &B00000000 'Ports PC0...5 auf Eingang Admux = &B1100000 'Referenz: Intern 2,56V, LeftAdjust aus, ADC-Kanal 0 (Pin C.0) Adcsra = &B10001101 'ADC an, Free Running aus, ADC-Interrupt an, Prescaler=32 On Adc Onadc 'Interrupt Routine wenn AD-Wandlung komplett Sreg.7 = 1
Das ist mein aktueller Code!Code:Do Adcsra.adsc = 1 'ADC Wandlung einschalten If B = 1 Then 'Wenn Adlow und Adhi gelesen wurden... Udr = Adlow '...erst Adlow schicken... Do : Loop Until Ucsra.udre = 1 '...auf leeres USART-Datenregister warten... ' Udr = Adhi '...und dann Adhi schicken B = 0 'Als letztes "Merkbit" B auf 0 setzen End If Wait 2 '2 Sekunden bis zur nächsten Wandlung warten Loop Onadc: 'Wenn ADC einen neuen Wert hat... Adlow = Adcl '...erst Adcl lesen... Adhi = Adch '...dann Adch... B = 1 '"Merkbit" B auf 1 setzen Return 'Zur Hauptschleife zurückkehren End
Ich weiß echt nicht ob ich da was vergessen oder falsch gemacht hab...für mich sieht's eigentlich Richtig aus![]()
Ich hoffe ihr könnt mir etwas weiterhelfen!
P.S.: Die Do:Loop Schleife beim übertragen der Daten an UDR ist ein wenig schlecht...wie könnte man die am besten umgehen? Mit dem TX-Interrupt vielleicht?







 
					
					
					
						
Zitieren

Lesezeichen