sooo.. nun ist das teil nach ein paar problemen verkabelt. hätte mir ja mal einer sagen können das sluminium leitet... dachte immer das leitet keinen strom. naja auf jedenfall habe ich irgendein potential auf den aluteilen. muss ich nochmal versuche rauszubekommen was.. weil eigentlich kann das net sein... aufjedenfall hat mein us sensor da die kapseln mit den aluteilen verbunden waren immer nen reset bzw. auch wirres zeug des motortreibers verursacht.
habe hier dann mal ein bild vom inneren angehangen (die gallery wollte das bild net schlucken). aber net wundern bei mir auf meinem basteltisch sieht es wüst aus da muss ich mal wieder aufräumen.
dann habe ich noch ein problem. ich habe jetzt ja die emg30 motoren mit drehgeben den habe ich wie folgt angeschlossen.
nun bekomme ich mit folgenden Bascom-code keine werte:Code:atmega8 int0 ---------------- Hall A | 4,7k pullup (wie vom hersteller empfohlen) | +5V 12V Akku ---------------- VCC Hall GND Akku ---------------- GND Hall 12V Akku ---------------- VCC Motor GND Akku ---------------- GND Motor
sry ist nicht optimiert und groß kommentiert.Code:'******************************************************************************* ' '******************************************************************************* '=============================================================================== '***| Mikrocontroller Config |************************************************** '=============================================================================== 'Microcontroller '================ $regfile = "m8def.dat" $crystal = 16000000 $hwstack = 32 $swstack = 10 $framesize = 40 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1 Config Portd.0 = Output Config Portd.1 = Output Config Portc.2 = Output Config Portc.3 = Output Config Int0 = Change Config Int1 = Change On Int0 Odo_r On Int1 Odo_l Enable Int0 Enable Int1 Enable Interrupts Dim Twi_control As Byte Dim Twi_status As Byte Dim Command As Byte Dim Index As Byte Dim Newbyte As Byte Dim Byte1 As Byte Dim Byte2 As Byte Dim Byte3 As Byte Dim Byte4 As Byte Dim Ticks_r As Byte Dim Ticks_l As Byte Declare Sub Twi_init_slave Enable Interrupts 'Aliases '======== M1 Alias Portd.0 M2 Alias Portd.1 M3 Alias Portc.2 M4 Alias Portc.3 'Init '===== Call Twi_init_slave Ticks_r = 0 Ticks_l = 0 Command = 0 Index = 0 Byte1 = 0 Byte2 = 0 Byte3 = 0 Byte4 = 0 M1 = 0 M2 = 0 M3 = 0 M4 = 0 '------------------------------------------------------------------------------- '***| Hauptprogramm |*********************************************************** '------------------------------------------------------------------------------- Do Newbyte = 0 'schauen ob TWINT gesetzt ist Twi_control = Twcr And &H80 ' Bit7 von Controlregister If Twi_control = &H80 Then Twi_status = Twsr And &HF8 ' Status 'wurde ein Byte geschickt? If Twi_status = &H80 Or Twi_status = &H88 Then Command = Twdr ' neue Daten merken Newbyte = 1 ' merken das ein neues Byte da ist End If 'TWINT muss immer gelöscht werden, damit es auf dem Bus weiter geht Twcr = &B11000100 ' TWINT löschen, erzeugt ACK End If 'wenn ein neues Byte gekommen ist verarbeiten If Newbyte <> 0 Then 'Register zuordnen -> Befehl Select Case Command Case 1 Gosub Ketten_stopp Case 2 Gosub Move Case 3 Gosub Ticks End Select End If Loop End '------------------------------------------------------------------------------- '***| Stoppt die Ketten |******************************************************* '------------------------------------------------------------------------------- Ketten_stopp: Index = 1 '4 Byte holen Gosub I2c_rx If Byte1 = 1 Then Pwm1a = 0 Pwm1b = 0 M1 = 0 M2 = 0 M3 = 0 M4 = 0 Else Pwm1a = 0 Pwm1b = 0 M1 = 0 M2 = 0 M3 = 0 M4 = 0 End If Return '------------------------------------------------------------------------------- '***| Move: Macht eine undefinierte bewegung (unendlich) |********************** '------------------------------------------------------------------------------- Move: Index = 4 '4 Byte holen Gosub I2c_rx 'rechts If Byte1 = 1 Then M3 = 0 M4 = 1 Elseif Byte1 = 2 Then M3 = 1 M4 = 0 End If Pwm1a = Byte2 'links If Byte3 = 1 Then M1 = 0 M2 = 1 Elseif Byte3 = 2 Then M1 = 1 M2 = 0 End If Pwm1b = Byte4 Return '------------------------------------------------------------------------------- '***| Turn: Macht eine definierte bewegung |************************************ '------------------------------------------------------------------------------- Ticks: Byte1 = Ticks_r Byte2 = Ticks_l 'Ticks_r = 0 'Ticks_l = 0 Index = 2 '4 Byte senden Gosub I2c_tx Return '------------------------------------------------------------------------------- '***| I2C-BUS Daten Empfangsroutinen |****************************************** '------------------------------------------------------------------------------- I2c_rx: 'erstes Byte empfangen Newbyte = 0 Do Twi_control = Twcr And &H80 If Twi_control = &H80 Then Twi_status = Twsr And &HF8 If Twi_status = &H80 Or Twi_status = &H88 Then Byte1 = Twdr Newbyte = 2 End If Twcr = &B11000100 End If If Newbyte = 2 Then Exit Do Loop 'Prüfen ob noch mehr empfangen werden soll If Index = 1 Then Return 'zweites Byte empfangen Newbyte = 0 Do Twi_control = Twcr And &H80 If Twi_control = &H80 Then Twi_status = Twsr And &HF8 If Twi_status = &H80 Or Twi_status = &H88 Then Byte2 = Twdr Newbyte = 2 End If Twcr = &B11000100 End If If Newbyte = 2 Then Exit Do Loop 'Prüfen ob noch mehr empfangen werden soll If Index = 2 Then Return Newbyte = 0 Do Twi_control = Twcr And &H80 If Twi_control = &H80 Then Twi_status = Twsr And &HF8 If Twi_status = &H80 Or Twi_status = &H88 Then Byte3 = Twdr Newbyte = 2 End If Twcr = &B11000100 End If If Newbyte = 2 Then Exit Do Loop 'Prüfen ob noch mehr empfangen werden soll If Index = 3 Then Return Newbyte = 0 Do Twi_control = Twcr And &H80 If Twi_control = &H80 Then Twi_status = Twsr And &HF8 If Twi_status = &H80 Or Twi_status = &H88 Then Byte4 = Twdr Newbyte = 2 End If Twcr = &B11000100 End If If Newbyte = 2 Then Exit Do Loop Return '------------------------------------------------------------------------------- '***| I2C-BUS Daten Senderoutinen |****************************************** '------------------------------------------------------------------------------- I2c_tx: 'erstes Byte empfangen Newbyte = 0 Do Twi_control = Twcr And &H80 If Twi_control = &H80 Then Twi_status = Twsr And &HF8 If Twi_status = &HA8 Or Twi_status = &HB8 Then Twdr = Byte1 Newbyte = 2 End If Twcr = &B11000100 End If If Newbyte = 2 Then Exit Do Loop 'Prüfen ob noch mehr empfangen werden soll If Index = 1 Then Return 'zweites Byte empfangen Newbyte = 0 Do Twi_control = Twcr And &H80 If Twi_control = &H80 Then Twi_status = Twsr And &HF8 If Twi_status = &HA8 Or Twi_status = &HB8 Then Twdr = Byte2 Newbyte = 2 End If Twcr = &B11000100 End If If Newbyte = 2 Then Exit Do Loop 'Prüfen ob noch mehr empfangen werden soll If Index = 2 Then Return Newbyte = 0 Do Twi_control = Twcr And &H80 If Twi_control = &H80 Then Twi_status = Twsr And &HF8 If Twi_status = &HA8 Or Twi_status = &HB8 Then Twdr = Byte3 Newbyte = 2 End If Twcr = &B11000100 End If If Newbyte = 2 Then Exit Do Loop 'Prüfen ob noch mehr empfangen werden soll If Index = 3 Then Return Newbyte = 0 Do Twi_control = Twcr And &H80 If Twi_control = &H80 Then Twi_status = Twsr And &HF8 If Twi_status = &HA8 Or Twi_status = &HB8 Then Twdr = Byte4 Newbyte = 2 End If Twcr = &B11000100 End If If Newbyte = 2 Then Exit Do Loop Return '------------------------------------------------------------------------------- '***| Rechte Odometrie |******************************************************** '------------------------------------------------------------------------------- Odo_r: Incr Ticks_r Return '------------------------------------------------------------------------------- '***| Linke Odometrie |********************************************************* '------------------------------------------------------------------------------- Odo_l: Incr Ticks_l Return '------------------------------------------------------------------------------- '***| Unterprogramme |********************************************************** '------------------------------------------------------------------------------- 'TWI als slave aktivieren Sub Twi_init_slave Twsr = 0 ' status und Prescaler auf 0 Twdr = &HFF ' default Twar = &H22 ' Slaveadresse setzen I2C-RX-Adr:Hex22 Twcr = &B01000100 ' TWI aktivieren, ACK einschalten End Sub
das empfangen der ticks mit dem master geht. habe testweise die ticks mal bei jedem loop durchlauf um einen erhöhen lassen. das kam alles an.
weiß jemand was da los ist?
wäre sehr dankebar wenn mir jemand helfen könnte.
vllt ist auch die verkabelung falsch aber bei einem fliegend aufgebautem test schwankte die spannung zwischen 0V und 5V







Zitieren

Lesezeichen