EIner muß Master und einer Slave sein. Danach richten sich auch die Pin-bezeichnungen
z.B Master In / Slave Out => MISO
danach muß du verbinden
hallo, ich habe in basocm dieses demo gefunden füer den datentransver von atmega zu atmega mittels spi.... :
Dim A(10) As Byte
Config Spi = Soft , Din =Pinb.0 , Dout =Portb.1 , Ss =Portb.2 , Clock =Portb.3
Spiinit
Spiout A(1), 4 'write 4 bytes a(1), a(2) , a(3) and a(4)
End
wenn ich jetzt einen 2. atmega verbinde (und zb spiin..), wie müssen sich die datenleitungen kreuzen und wie funktioniert der interrupt dazu wenn sich diese routine mit in einer do..loop..schleife befindet?
EIner muß Master und einer Slave sein. Danach richten sich auch die Pin-bezeichnungen
z.B Master In / Slave Out => MISO
danach muß du verbinden
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
CONFIG SPI = HARD, INTERRUPT=ON|OFF, DATA ORDER = LSB|MSB , MASTER = YES|NO , POLARITY = HIGH|LOW , PHASE = 0|1, CLOCKRATE = 4|16|64|128 , NOSS=1|0
wie setze ich beim atmega32(slave) 8mhz diese config und beim atmega8 8mhz master die config ?
mfg
hallo, die programme unten laufen soweit !
bloss auf dem lcd wird immer nur jede 2. zahl angezeigt, je nachdem wo es anfängt zu zählen : 94,96,98.... oder 93,95,97.
woran liegt das?
master :
slave :Code:$regfile = "M8def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 32 $framesize = 64 $baud = 19200 Config Portb.5 = Output Config Portb.4 = Input Config Portb.3 = Output Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = High , Phase = 0 , Clockrate = 64 , Noss = 1 Spiinit Dim B As Byte Waitms 255 Do For B = 93 To 112 Spiout B , 1 Waitms 255 Next Loop End
Code:$regfile = "M32def.dat" $crystal = 8000000 $hwstack = 32 $swstack = 32 $framesize = 64 $baud = 19200 Config Lcdpin = Pin , Db4 = Portc.0 , Db5 = Portc.1 , Db6 = Portc.2 , Db7 = Portc.3 , E = Portc.4 , Rs = Portc.5 Config Lcd = 16 * 2 Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = No , Polarity = High , Phase = 0 , Clockrate = 64 , Noss = 1 Spiinit Enable Spi On Spi Spi_isr 'Interrupt's global aktivieren Enable Interrupts Dim B As Byte , Status As Byte Status = 0 Do If Status = 1 Then Cls Lcd B Waitms 50 Status = 0 End If Loop End Spi_isr: Spiin B , 1 Status = 1 Return
Hallo,
könnte es sein das der Slave so zu langsam ist
bau mal das Status = 0 gleich nach der If-Abfrage, und evtl. das Waitms 50 raus.
mit einem array funktioniert es wunderbar. wird wohl die lcd-routine das einlesen ausbremsen.
mfg
Das Cls wird schon bremsen,
dann muss auch noch die Byte-Variable in einen String gewandelt werden,
und dann nochmal 50ms warten,
und dann erst wird der Status zurückgesetzt, da kann es schon sein, das ein weiteres Byte angekommen ist, das damit verschluckt wird.
Deswegen wärs praktisch als erstes den Status zurückzusetzen, denn dann kann die ISR das nächste Byte anzeigen, bzw. wird von der Abfrage erkannt.
Lesezeichen