I2C Slave mit Attiny2313 und Mega644 als Master Bascom

#2393583
Lesenswert?

Hallo zusammen,

schildere hier mal mein Problem da ich nun wirklich nicht mehr weiter 
weiß,

habe folgende Konstelation

Master Mega644P mit software I2C und 2 funktionierende Slaves PC8574

wollte jetzt noch einen Attiny2313 mit in den I2C bus einbinden und mir 
die Lib von Bascom gekauft für Slave
und dann mal das Beispielprogramm für den PCF8574 verwendet, aber sobald 
ich den Tiny mit der Mega verbinde steht das Program vom Tiny und der 
Mega reagiert nur noch sehr langsam und die 2 weiteren Slaves (Pc8574) 
sind ohne Funktion, also stört der Tiny den ganzen bus und bleibt selber 
auch noch stehen.

Ich habe alle AVR auf der selben Spannungsversorgung und mit 30cm 
Kabellänge sind die SCL und SDA Leitungen verbunden.
am Tiny SCL = PD4 SDA = PD2

was bedeutet in "Config I2cslave = &B01100000 , int = int0 , timer = 
Timer1" das int = ist das der int den jeder I2C Baustein hat, oder???? 
muss dieser zwingend verwendet werden?

hier mein Beispielcode den ich zum Testen verwende.
wenn ich das config I2Cslave auskommentiere läuft das Programm und ich 
kann die RC5 befehle übers Terminal sehen, sobald das drin ist geht 
nichts mehr. :-(
1
$regfile = "attiny2313.dat"
2
$crystal = 8000000
3
$baud = 19200                                               
4
$swstack = 10                                               
5
$framesize = 40                                             
6
$lib "mcsbyte.lbx"
7

8

9
Config Rc5 = Pind.6 , Timer = 0 , Wait = 2000
10

11
Dim Address As Byte ,
12
dim Command As Byte
13

14
Config I2cslave = &B01100000 , int = int1 , timer = Timer1 'H60 Int0 ist ja bereits vom SDA belegt oder sehe ich das falsch?????                      
15

16
Dim Bfake As Byte
17

18
Print "waiting for command"
19
Enable Interrupts
20

21
Do
22

23
Getrc5(address , Command)
24

25
If Address < 255 Then
26

27
    Command = Command And &B01111111
28

29
    Print Address ; "  " ; Command
30

31
End If
32

33
 Loop
34

35

36
I2c_master_needs_data:
37
waitms 10
38
_a1 = Command                                           
39
Return
40

41

42
I2c_master_has_data:
43
waitms 10
44
Bfake =_a1                                                                                              
45
Return

hoffe ihr habt nen Rat für mich

Grüße
Simon
Gast #2393842
Lesenswert?

Hallo,

in der BASCOM-Hilfe zu dem "Config"-Kommando und auch im zugehörigen 
Beispielprogramm ist doch alles beschrieben. Die Lib und das 
Beispielprogramm läuft NUR auf einem AT90Sxxxx (mit xxxx = 2313, 2323, 
etc; siehe Hilfe) mit den angegebenen Voraussetzungen (Controller ohne 
Hardware-I2C-Modul) und nur mit INT0 und Timer0. Also NICHT auf einem 
Tiny2313. Für andere Timer oder Int's müsste die Lib neu compiliert 
werden, und sie ist ungeeignet für Chips mit I2C-Hardware.

Der Tiny2313 hat ein USI-Interface, das man auch ohne BASCOM 
I2C-Slave-Library "zu Fuss", also durch Programmieren der USI-Register, 
für I2C (hier TWI genannt) als Slave initialisieren kann. Näheres dazu 
findet man im Tiny-Datenblatt.
#2394145
Lesenswert?

Gibt es dann für Bascom ein kleines Demo Programm wie man die Hardware 
TWI vom Tiny2313 "oder anderen die eine Hardware TWI haben" benutzt.

Ich würde gerne vom Tiny Werte mit dem Mega auslesen, wie ich sie mit 
dem Mega anfrage ist kein Problem aber was muss ich beim Tiny anstellen 
damit der auch die Werte sendet wenn sie vom Mega angefragt werden???

Danke
#2394998
Lesenswert?

Hallo,

hab jetzt mal folgenden Code versucht auf meinem Tiny2313 mit jeder 
menge Fehlermeldungen, sobald ich als AVR nen mega88 angebe compiliert 
Bascom es ohne Probleme :-(
1
$regfile = "attiny2313.dat"                                     
2
$crystal = 8000000                                          
3
$baud = 19200                                               
4
 
5
Print "MCS Electronics TWI-slave demo"
6
 
7
Config Twislave = &H70 , Btr = 1 , Bitrate = 100000 , Gencall = 1
8
Enable Interrupts
9
Do
10
  nop
11
Loop
12
End
13
Twi_stop_rstart_received:
14
  Print "Master sent stop or repeated start"
15
Return
16
 
17
 
18
Twi_addressed_goread:
19
  Print "We were addressed and master will send data"
20
Return
21
 
22
 
23
Twi_addressed_gowrite:
24
  Print "We were addressed and master will read data"
25
Return
26
Twi_gotdata:
27
   Print "received : " ; Twi
28
Return
29
Twi_master_needs_byte:
30
  Print "Master needs byte : " ; Twi_btr
31
  Twi = 65                                                 
32
Return
33
Twi_master_need_nomore_byte:
34
  Print "Master does not need anymore bytes"
35
Return

folgende Fehlermeldungen bekomme ich
Error : 7     Line :   47    IF THEN expected
Error : 7     Line :   47    IF THEN expected
Error : 222   Line :   47    Illegal character [expected (, got '' 
[DDR]]
Error : 222   Line :   47    Illegal character [expected (, got '' 
[DDR]]
Error : 7     Line :   47    IF THEN expected
Error : 7     Line :   47    IF THEN expected
Error : 46    Line :   47    Assignment error [TWSR: 0   0: 112]
Error : 46    Line :   47    Assignment error [TWBR: 0   32: 112]
Error : 46    Line :   47    Assignment error [TWAR: 0   112: 112]
Error : 46    Line :   47    Assignment error [TWCR: 0   &B01000101: 
112]
Error : 117   Line :   47    Unknown interrupt [TWI]

Line 47 = Config Twislave = &H70 , Btr = 1 , Bitrate = 100000 , Gencall 
= 1

kann mir da jemand nen Grund nennen?

Danke

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren