-
          
	
		
		
	
	
	
	
	
		
			
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter-Spezialist
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
				
					I2C übertragung will ned
				
				
						
							
							
						
						
				
					
						
							Hi,
hab ein problem: 2x ATMEGA128, beide verbunden an Pind.0-->Pind.0 und Pind.1-->Pind.1 und gnd natürlich
der eine sendet I2C was:
$regfile = "m128def.dat"
$crystal = 16000000
Config Portd = Output
Config Scl = Portd.0
Config Sda = Portd.1
Do
I2cstart
I2cwbyte 10
I2cstop
Wait 3
Loop
End
'#########################################
dewr andere soll es empfangen, es geht aber nicht. schon die startbedingung macht ihm zu schaffen. (siehe debug im kommentar) Der code zum empfangen läuft mit anderen devices prima...Ich logge mit ähnlichem code I2C aktivität an einer schnittstelle prima. Liegt es an dem obrern code das er nicht sendet???
$regfile = "m128def.dat"
$crystal = 16000000
$baud = 57600
Config Portd = Input
'Portd = &B00000001                                          'interner Pullup an PD0 aktivieren
Cl Alias Pind.0                                             'Clock an Pind.0
Da Alias Pind.1                                             'SDA an Pind.1
On Int1 Startchk
Config Int1 = Falling
Dim Adr As Byte
dim c as Byte
Dim i as byte
Enable Interrupts
Enable Int1
On Int1 Startchk
Config Int1 = Falling 'startbedingung: da fällt (es wird dann gecheckt ob CL=1)
Do
nop
Loop
End
Startchk:
If Cl = 1 Then
Disable Int1
'Gosub Rxdata   (auskommentiert für debug)
Print "got started" '(debug)
End If
Waitms 10
Enable Int1
Return
Rxdata:
Adr = 0
C = 128
For I = 1 To 8
Do
Loop Until Cl = 0
Do
Loop Until Cl = 1
If Da = 1 Then Adr = Adr + C
C = C / 2
Next
'ack überspringen
Gosub Jmpack
Return
Jmpack:
'ack überspringen
Do
Loop Until Cl = 0
Do
Loop Until Cl = 1
Print Hex(adr)
Return
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter-Spezialist
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Es scheint so als wären Pullup unbedingt notwendig. Habe interne pullup aktiviert, jetzt gehts
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
		
			
				
				
						
						
				
					
						
							Hi Sebastian,
möchte ebenfalls zwei  Atmega verbinden (M16), kann deiner Programmierung nicht ganz folgen: In welche Variable schreibst Du den empfangenen Wert? Hast Du den Code selbst emtwickelt?
Gruß Florian
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter-Spezialist
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Ja der code ist von mir. 
Die empfangene Variable wird in adr geschrieben.
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter Genie
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							Hi
Ja, Pullups sind unbedingt notwendig.
Allerdings sollten die extern sein.
2x 4.7kOhm auf VCC, und du bist auf der sicheren Seite.
Ganz liebe Grüße, Tobi
						
					 
					
				 
			 
			
			
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter-Spezialist
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							funktioniert prima mit den internen... habs ewig zum testen laufen lassen. gab keine schwierigkeiten. Ich denke das es auch danit zu tun hat das ich nur ca. 5cm leitung zwischen den beiden µ-Coms habe.
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Robotik Einstein
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							hallo warum nehmt  ihr nicht 2 softwaremässige schnittstellen :
Open "comd.2:115200,8,n,1" For Output As #1 ,(pin d2)
Open "comd.3:115200,8,n,1" For Input As #2  ,(pin d3)
sind problemlos und schmerzfrei.
mfg pebisoft
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter-Spezialist
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
				
					
						
							zuviel rechenzeit.
Ich hatte die senderoutine schon lange vorher fertig und in einer anderen anwendung am laufen. da diese anwendung ähnlich ist hat es sich angeboten, um den programmieraufwand niedrig zu halten
						
					 
					
				 
			 
			
			
		 
	 
		
	
 
- 
	
	
		
			
			
				Erfahrener Benutzer
			
			
				Roboter Genie
			
			
			
			 
			
				
				
				
				
				
					    
				
			
		 
		
			
				
				
						
						
							
						
				
					
						
							HI
...und schneller.
Einen UART hat der Mega128 sogar zwei, und der Mega16 auch einen.
Mal ganz davon abgesehen, dass das ganze etwas problemloser läuft, ist's auch noch unter Bascom einfacher anzusteuern.
Softwaremäßig emulieren würde ich nicht, denn das frisst unheimlich Power. Wenn das die Hardware macht, hat die Software damit garnix zu tun. 
Ganz liebe Grüße, 
Tobi
						
					 
					
				 
			 
			
			
			
			
		 
	 
		
	
 
		
		
		
	
 
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
			
				
				Berechtigungen
			
			
				
	
		- Neue Themen erstellen: Nein
 
		- Themen beantworten: Nein
 
		- Anhänge hochladen: Nein
 
		- Beiträge bearbeiten: Nein
 
		-  
 
	
	
	Foren-Regeln
 
			 
		 
	 
 
  
 
  
 
Lesezeichen