Volvo S60, S80, V70N (00-08), XC70 (00-08), XC90 (03-14) relaterade ämnen OBS! vid motorproblem försök att ange vad du har för motor i bilen...

Moderator: Moderatorer

Användarvisningsbild
av andreas 80
#368631
Ville bara meddela att jag hittat sekvensen nu.
Det är bara att skicka följande 7 byte över K-lina så får man tillgång till CAN-nätet.

De är presenterade hexadecimalt nedan:
84 40 13 b2 f0 03 7c

Använde mig av en vanlig USB -> RS232 omvandlare.
Skapade en omvandlare för att göra om RS232 spänningsnivåer (+/- 10V) till K-lina (0V & +12V)
Körde ett standard terminalprogram med stöd för att skicka Hex-koder istället för Ascii. Ställde in 10400 baud med 8N1.
Nästa steg blir att skapa en enhet som automatiskt skickar det, för man måste skicka var 5:e sekund annars så stänger den bussen igen.
av Fred
#368673
Jag fattar inte ett spår av det du skriver...men jag applåderar din driftighet! Jag är också säker på att andra kan ha nytta av informationen som du fått fram.

Nu är man ju väldigt nyfiken på vad du har för planer med det du hittat! Vad kan man göra med siffrorna?

Mvh
/Fred
av tbar
#369115
Tja,
Det här var ju riktigt intressant. Ser ut att kunna bli ett spännande projekt. Har du lust att fortsätta skriva om hur det fortlöper.
Tänkte du köra något OS/RTOS på processorn?
Användarvisningsbild
av andreas 80
#369780
Visst kan jag fortsätta skriva om vad jag gör framöver.
Vet inte vad jag kommer köra för typ av program/OS än. Är inte någon mästare på just programmering tycker jag.
Det blir nog en del i taget, så får jag se hur man kan bygga ihop det sedan.

Jag läste just assembler för mikrodatorer när jag studerade, så det är det jag fortsatt med nu.
C/C++ är nog bättre, så jag överväger om jag skall lära mig det.

Så här blev förresten schemat på det jag gjorde för att öppna can nätet
Bild

Och om det finns någon intresserad så har jag programmet jag gjorde för mikroprocessorn (PIC12F675) här.
Allt gjort i microchip's egna miljö, MPLAB IDE.
Som sagt så är jag inte bäst på programmering, så det kunde säkert gjorts på något bättre sätt.
Nästa gång använder jag nog en processor med inbyggd UART, så blir det mycket enklare.
Mina kommentarer flyttade sig lite i sidled när jag kopierade.
Kod: Markera allt
	list p=12f675
#include P12f675.inc
	__config 0x3F94		;Internal Osc no clk out, WDT off, PUT off, MCLRE internal, BODEN off, CP off, CPD off

;Create variables in RAM area, starting at 0x20
sendbyte EQU 0x20			;Byte ready to send
bit_count EQU 0x21			;Counter to keep track of which bit in "sendbyte" is beeing transmitted
byte_count EQU 0x22			;Counter to keep track of which byte is beeing sent
delay_1 EQU 0x23			;Delay each bit to establish 10,4k baud
ready_to_send EQU 0x24		;Used to create delay between sends, ~2sec

	org 0x00				;Reset vektor
	goto main

	org 0x04				;Start of Interrupt routine

	BTFSC PIR1,TMR1IF		;Check if Timer1 interrupt has occured
	GOTO tmr1_int
	retfie

main:
;-----------------------Start init-----------------------
	call    0x3FF                 ; retrieve factory calibration value for internal oscillator
	bsf     STATUS,RP0       ; set file register bank to 1 
	movwf   OSCCAL          ; update register with factory cal value 
	
	bsf PIE1,T1IE			;TMR1 interrupt enable
	bsf INTCON,PEIE			;Enable all perpheral interrupt (TMR1)
	bcf	INTCON,T0IE			;TMR0 interrupt disable
	BSF	INTCON,GIE			;Interrupt enable

	movlw 0x00
	movwf ANSEL
	clrf TRISIO				;Set all pins to output (except GP3/MCLR)
	
	bcf STATUS,RP0

	movlw B'00110001'
	movwf T1CON				;Setup Timer1, prescler 1:8, int.osc., enabled	

	clrf GPIO				;Disable all A/D and comparators
	movlw 0x07				;All pins digital I/O
	movwf CMCON

	call delay
	call delay				;Delay to make Tx-line idle (+12V)
;------------------ Init Done---------------------------

	clrf byte_count

load_byte:
	movf byte_count,W		;Load actual table position in work
	call table				;Load "sendbyte" with data from table
	movwf sendbyte	
	call uart				;Send "sendbyte"
	incf byte_count,F		;Prepare to load next byte
	btfss byte_count,2
	goto load_byte
	btfss byte_count,1		;Check to se that all bytes are sent
	goto load_byte			;If not go back to "load_byte", to continue with next
	btfss byte_count,0		
	goto load_byte			;Else goto "end_loop" to wait for next transmission
	clrf byte_count
	goto end_loop
end_loop:
	btfss ready_to_send,2
	goto end_loop			;Loop to create 2sek delay after each transmission
	goto load_byte			;Uses Timer1 to create interrupt which increases ready_to_send

;-----------Uart, sends bits located in "sendbyte" register using 8N1 transmission---------
uart:
	clrf ready_to_send	
	movlw 0x09				;Ready to send 8bits, (use nr of bits + 1)
	movwf bit_count
start_bit:
	bsf GPIO,GP0			;Startbit = '0V', transistor connected to pin
	nop						;will reverse polarity
	nop						;so GP0 = '1' --> 0V
	nop						;GP0 = '0' --> 12V
	nop
	nop
start_byte:
	call delay
	decfsz bit_count,F		;If all bits sent proceed to send stop bit
	goto send_bit			;Else send next bit
stopp_bit:
	nop
	nop						;nop used to keep delay of 96us between each bit
	nop						
	nop
	bcf GPIO,GP0			;Stoppbit = '1'
	call delay
	return

send_bit:					;Send bit from last position of sendbyte register
	btfsc sendbyte,0
	goto send_1
	nop
send_0:
	bsf GPIO,GP0
	goto return_sendbit	
send_1:
	bcf GPIO,GP0
	goto return_sendbit
return_sendbit
	rrf sendbyte,F			;Then rotate right to allow for transmission of next bit
	goto start_byte

delay:						;Hardcoded Delay used to create 10400 baud 
	movlw 0x1A				;This is made with regard to the uart above	
	movwf delay_1			        ;Total delay between each bit should be 96uS = 96 instruction cycles at 4MHz clockspeed 
delay_loop:
	decfsz delay_1,F
	goto delay_loop
	nop
	return
	

tmr1_int:                                         ;Timer1 interrupt routine
	incf ready_to_send,F                ;Increase counter for delay between tranmissions
	bcf PIR1,TMR1IF			;Clear interrupt flag for TMR1
	retfie	


table:						;Table containing bytes to send.
	addwf PCL,F
	retlw 0x84
	retlw 0x40
	retlw 0x13
	retlw 0xb2
	retlw 0xf0
	retlw 0x03
	retlw 0x7c

	org 0x3ff				;Oscillator calibration value.
	retlw 0x94				;!! Please check your value by reading your PIC before programming
	end						;Then change this value to match your processor.
Användarvisningsbild
av nicwei01
#374037
Det här är RIKTIGT intressant! Kommer du att kunna ändra parametrar i befintlig mjukvara i bilens olika noder? Tex. stänga av funktionen aktivering av bakrutetorkare vid backning?
av Fred
#374082
Det vet du att man kan göra hos Volvo, eller hur nicwei01?
av larsolsson
#374197
Superintressant projekt.

Det skulle vara intressant att koppla ihop bilen med en mobil för att fjärrstyra tex. bränslevärmaren.

/ Lars
Användarvisningsbild
av andreas 80
#374246
nicwei01 skrev:Det här är RIKTIGT intressant! Kommer du att kunna ändra parametrar i befintlig mjukvara i bilens olika noder? Tex. stänga av funktionen aktivering av bakrutetorkare vid backning?
Ja teoretiskt skulle det vara möjligt, men jag har inte de program som behövs för att ändra de parametrarna, eller något annat för den delen heller än så länge.
Har några meddelanden jag kan skicka för att läsa felkoder, precis som PPC:n gör. Samt läsa några realtidsdata.
Det är väl egentligen vad jag tänkt försöka mig på framöver nu.
Superintressant projekt.

Det skulle vara intressant att koppla ihop bilen med en mobil för att fjärrstyra tex. bränslevärmaren.

/ Lars
Skulle vara väldigt smidigt. Har själv ingen kunskap om värmare, hur de styrs och deras koppling till resten av bilen.
Eftersom jag inte har en själv är det inte särskilt intressant för mig heller.
Det är väl bara att hoppas att jag väcker några idéer hos andra personer som kan bygga vidare, om jag nu lyckas få ihop något som fungerar.
Användarvisningsbild
av jimDK
#391467
andreas 80 skrev:C/C++ är nog bättre, så jag överväger om jag skall lära mig det.
TACK för dina input (byte-sekvens, baudrate etc) :D

Jag arbetar som programutvecklare och har använt C och C + + i många år.
på C så jag rekommenderar boken av författarna Kernighan & Ritchie
http://en.wikipedia.org/wiki/The_C_Programming_Language_% 28book% 29
(Jag tyckar inte C++ ger fördel i protokoll programvara /lågnivau programvara)

Har du installerat vadis?
(Finns referensvärden för de olika sensorer.men det är först när den nuvarande spänningen kan läsas på CANbussen, jag menar de enskilda sensorerna är närvarande endast när du kan läsa på CAN-buss)

Kan du inte köra en liten bit programvara på en bärbar dator som kan hålla anslutningen öppen?
(kanske du inte gillar att övergå till att använda en PC, utan hellre använda dedikerad hårdvara)
(Jag har gjort några protokoll programvara på PC i tiden, också för seriella portar.)
Om du brukar PC, så du kan säkert läsa CAN-bus kommandoer via ett instickskort och speciell programvara?
ni har nämnt tidigare Canalyzer.
Jag är inte så skickliga på den låga nivå, nära hårdvaran :roll:
Jag skulle vilja hjälpa till med programvara/utveckling, till exempel den seriella porten i C till exempel under Linux.
tex jag kan skapa ett program i C-språket, som skickar byte-sekvensen från en Linux-dator

Ursäkta min dålig svenska :oops:
Användarvisningsbild
av jimDK
#391471
Kvaser har ett SDK "CanLIB SDK" för utveckling under Linux.
Andreas, Har du börjat använda det?

För windows programvaruutveckling, jag har tidigare använt Visual C++, kan laddas ner gratis från Microsoft
För Linux jag användar Eclipse, tyckar den är jätte bra.
(Eclipse användar jag för tiden också på windows faktisk)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 9

Jag syftar på resonemanget som somliga sl&a[…]

Kan det vara fel på vevaxelgivaren? Lå[…]

Först måste du ta bort den beiga plaste[…]

Tänk den dag det kunde bli så att bilti[…]