Escolar Documentos
Profissional Documentos
Cultura Documentos
FACULDADE DE TECNOLOGIA
FATEC SANTO ANDRÉ
Tecnologia em Eletrônica Automotiva
FERRAMENTA DE DIAGNÓSTICO
AUTOMOTIVO OBD II
FERRAMENTA DE DIAGNÓSTICO
AUTOMOTIVO OBD II
gratidão, pelo exemplo de vida, por oferecerem todo o suporte para nossa educação, semente
Edson Kitani e Orlando Salvo Junior, pelo apoio que tivemos, e a todos aqueles que direta ou
colaboradores e funcionários da Fatec Santo André por terem reservado um tempo de suas
vidas para a transmissão de seus conhecimentos e por sempre estarem dispostos a nos ajudar.
“É a chave que abre a porta lá do
é o ponto da questão.”
Raul Seixas
RESUMO
Palavras chaves: Diagnóstico Veicular, OBD II, Scanner automotivo, DTC (Código
de Falha).
ABSTRACT
Key Word: Vehicle Diagnose, OBD II (on board diagnostics), automotive scanner,
DTCs (Diagnostic Trouble Codes).
LISTA DE ILUSTRAÇÕES
1 INTRODUÇÃO ................................................................................................... 14
3.METODOLOGIA ................................................................................................ 35
5. CONCLUSÃO..................................................................................................... 58
6. REFERÊNCIAS.................................................................................................. 59
ANEXO ................................................................................................................... 62
A indústria automotiva motivada pela redução nos custos de produção, pelas leis que
limitam os níveis de emissões de gases resultantes do processo de combustão, pelo aumento
da segurança e conforto dos ocupantes e por melhorias de desempenho, iniciou a substituição
dos antigos sistemas (mecânicos, hidráulicos e pneumáticos) que possuíam eficiência muito
menor por sistemas eletrônicos. (TOSI & GALVÃO & LIMA, 2008).
Sua primeira versão era simples, conforme Belo (BELO, 2003), não se padronizava as
mensagens utilizadas pelas diversas montadoras, eram realizadas leituras de um reduzido
número de códigos de falha e monitorava-se alguns sensores. Na segunda versão esses
problemas foram solucionados e inúmeros dados podem ser lidos através do agora OBDII,
14
que além de ser mais completo, padronizou as mensagens de comunicação, facilitando
enormemente o processo de diagnóstico. Agora muitos dos códigos de erro devem ser iguais,
independente da marca do veículo, e como a interface física e o protocolo são os mesmos, um
só aparelho pode ser utilizado para diagnosticar diversos automóveis.
Este projeto é composto por uma parte, monográfica, que descreve o processo de
trabalho e o embasamento teórico, e finalmente uma parte experimental.
Este trabalho tem por objetivo desenvolver uma ferramenta de diagnóstico veicular para
veículos que possuam o sistema OBD-II, utilizando componentes eletrônicos que se
encontram na placa de experiências McLab2, juntamente com um circuito integrado dedicado
da família ELM e um software desenvolvido para o equipamento.
1.2 Conteúdo
Este trabalho estará assim dividido; o capítulo 2 discorrerá sobre uma revisão
bibliográfica mostrando os principais conceitos de sistema de diagnóstico veicular; o padrão
OBD-II, os protocolos de comunicação automotivos, o circuito integrado da família ELM e a
15
comunicação serial. No capítulo 3 será detalhado todo processo de aplicação da metodologia
utilizada no desenvolvimento do projeto. No capítulo 4 descrevem os ensaios e os resultados
obtidos, estratificando-os para um estudo comparativo entre o desejado e o realizado.
Analisar-se-á se a meta foi atingida e quais foram as dificuldades encontradas neste projeto.
Finalmente, no capítulo 5 discutem-se as conclusões obtidas dos resultados e a proposição de
novos estudos e desafios.
16
2. SISTEMA DIAGNÓSTICO EMBARCADO
Desde então a utilização da eletrônica embarcada se incrementa dia à dia, e será ainda
maior no futuro. Abaixo, descrevem-se algumas das presentes e futuras aplicações da
eletrônica embarcada no automóvel:
- Redes de comunicação, navegação e entretenimento.
- Direção ativa
- Freios eletrônicos
- Conforto e Segurança
17
-Controle eletrônico da injeção do combustível (minimizar consumo e maximizar
desempenho).
- Instrumentação para a medição de parâmetros do desempenho do veiculo e a
obtenção de diagnósticos de eventuais falhas do sistema.
Sendo este último base para a construção desta monografia e para montagem do
trabalho prático.
Perceba que, os desejos dos clientes têm extrema relação com o avanço da eletrônica
embarcada, seja para cumprimento de normas de emissão, diagnose, segurança, conforto,
custo, eficiência, economia, etc.
18
Atualmente, no setor automobilístico destacam-se dois tipos: arquitetura centralizada e a
arquitetura distribuída.
Neste tipo de arquitetura uma única ECU (Eletronic Control Unit) é responsável por
todo o controle existente no sistema, recebendo os sinais de entrada (através dos sensores), os
processando e comandando as respectivas saídas (atuadores) de controle do sistema.
Neste tipo de arquitetura, num mesmo sistema de controle, várias ECU´s interligadas,
dividem o controle e processamento de diversas funções existentes no veículo.
20
-Exige a utilização de um protocolo de comunicação.
A figura 4 faz uma relação entre a responsabilidade por ECU do sistema de controle,
maior na arquitetura centralizada, com a complexidade deste sistema, maior na arquitetura
distribuída.
Em vista disso, das evoluções tecnológicas e das possibilidades de futuras expansões
com o mínimo de alterações do sistema como um todo, optou-se pela maior eficiência das
arquiteturas distribuídas. (GUIMARÃES, 2003)
Diante disso, se fez necessário a utilização de um protocolo de comunicação, para a
interconexão dos módulos, troca de informações pertinentes a cada uma das funções
controladas, processadas e executadas no sistema. Então a Bosch apresentou o CAN
(Controller Area Network). Esse sistema se mostrou o mais eficiente, robusto e adequado para
tal função e logo ganhou a aceitação dos fabricantes de automóveis e passou a dominar a
indústria automotiva.
21
2.3 Diagnóstico Veicular
Belo (BELO, 2003) afirma que os sistemas de diagnóstico foram desenvolvidos com o
propósito de manter os níveis de emissão de poluentes dos veículos dentro de padrões
estabelecidos. Os sistemas de primeira geração eram simples e realizam essa função de forma
eficiente, porém possuíam algumas deficiências graves. Primeiramente ao fato de que as
falhas somente eram identificadas quando houvesse desgaste do componente ao ponto deste
tornar-se inoperante, o que era muito prejudicial, pois se aumentava assim os níveis de
emissão de poluentes. Outra grave deficiência era a dificuldade do acesso a essas informações
de diagnostico de falha, pois cada fabricante possuía seus próprios protocolos, do qual o
acesso aos serviços de diagnose somente eram realizados por ferramentas disponibilizadas
pelos próprios. (BELO, 2003)
22
Diniz (DINIZ & COLÓN & SILVA & AGUIAR & SILVA. F & PALÁCIOS, 2009)
afirma que, o próximo passo será a introdução do padrão OBD-III, na qual o veiculo entrará
em contato com as autoridades responsáveis no caso de aumento dos níveis de emissões, e
esta será notificada e atuará para que o defeito seja reparado. Com isso, não será mais
necessário o controle de emissões de gases, que atualmente acontece de dois em dois anos,
aumentando assim a eficiência.
OBDBr-2:
Observe que, o conector formato `D` - oferece maior facilidade de conexão com uma
mão e sem visão.
Contatos 2 e 10 – J1850 Bus+ e J1850 Bus
Contatos 6 e 14 – CAN High e CAN Low – ISO 15765-4
Contatos 7 e 14 – Linha K e Linha L - ISO 9141-2 e ISSO 14239-4
Contato 4. Massa do chassi – fornecer massa eficiente para equipamento externo.
Contato 5. Sinal massa – referência para comunicação.
Contato 16 - Positivo permanente:
Conector tipo A – 12V (4A)
Conector tipo B – 24V (2A)
Protegido por fusível ou elemento protetor no circuito.
Referência para comunicação da linha K.
25
Contatos 1, 3, 8, 9 11, 12 e 13-Podem ser utilizados pelo fabricante de equipamento,
mantendo alta impedância com os contatos 4 e 5. Por exemplo > 500 k Ohms.
O segundo dígito indica a entidade responsável pela sua definição. Através deste é
possível verificar se o código é comum a todos os fabricantes (padrão ISO/SAE) ou
específico. Como é possível visualizar na tabela 2.
Tabela 2: Código de Falha 2º dígito
26
O terceiro dígito do código de falhas, cujos valores são mostrados na tabela 3, refere-
se a um subgrupo de funções do veículo. E o quarto e o quinto dígito referem-se à falha
específica no referido subgrupo.
O sistema OBD-II apresenta uma arquitetura de rede baseada no modelo OSI (Open
Systems Interconnection), que é um modo de se subdividir os sistemas de comunicação em
27
camadas, definido pela norma ISO 7498, contendo conforme figura 7, camadas de aplicação,
enlace e física.
O protocolo ISO 14230 ou KWP 2000 “Keyword Protocol 2000”, é segundo Belo
(BELO, 2003), um conjunto de normas estabelecidas pela ISO, com o objetivo de definir
29
requisitos comuns para a utilização dos sistemas de diagnóstico implementados com o uso de
uma linha de comunicação serial. Apresenta tanto serviços de diagnostico, que compõem a
camada de aplicação e permitem o acesso a diagnose embarcada, quanto serviços de
comunicação que fornece a infra-estrutura necessária para a comunicação com a unidade
eletrônica.
Conforme Guimarães (GUIMARÂES, 2007), este protocolo permite a compatibilidade
com as implementações da ISO 9141-2 existentes, e explora novas opções para proporcionar
uma maior flexibilidade e melhorar o desempenho.
A figura abaixo apresenta a topologia KWP 2000, aonde a linha K é utilizada para a
inicialização e comunicação e a linha L é um opcional, somente para inicialização.
30
Descrição do funcionamento:
- Bus alterna entre passivas e ativas para cada bit
- Alta tensão do barramento é dominante
- Dominante símbolos
• Bus Active: Longo domina pulsos curtos
• Bus Passiva: Curto domina pulsos longos
- SAE J1850 VPW – modulação por largura de pulso variável- 10.4/41.6 kbaud,
padrão da General Motors: o valor do símbolo é determinado pela largura do pulso e pelo
estado do barramento.
- Pino 2: Bus +
- Bus fica inativo baixo
- Alta tensão de +7 V
- Ponto de Decisão é +3,5 V
- comprimento da mensagem é limitado a 11 bytes, inclusive CRC
- Emprega CSMA / NDA
-Descrição do funcionamento:
- Tempo de bit fixo.
- Pulso de curta ou longa iniciando com tempo start bit.
- Longo domina curta.
32
recebimento desse byte. Este pulso em nível baixo é denominado de Start Bit (SOUZA &
LAVINIA,2003).
Após o Start Bit, TX enviara 8 bits de dados, cada um desses bits possuem o mesmo
intervalo de tempo do Start Bit. Rx o interpretar e deixa passar o tempo para depois coletar os
8 bits, cada um dos bit é pego no meio tempo de bit, ou seja, TBIT/2.No fim da transmissão o
TX envia um Stop Bit, que nada mais é do que um bit em nível lógico1, para garantir que a
linha volte ao seu estado de repouso padrão. (SOUZA & LAVINIA,2003).
No total da comunicação serão enviados 10 bits (1 Start Bit + 8 Bit de Dados + 1 Stop
Bit). A figura 11 representa o envio do byte 01101001.
Quase todos os automóveis produzidos hoje em dia devem, por lei, ter uma interface
através da qual, equipamentos de teste podem obter informações de diagnóstico. A
transferência de dados nesta interface segue vários padrões, e nenhum deles é diretamente
compatível com PCs ou PDAs. O ELM327 é designado para atuar como uma ponte entre
estas portas OBD (On board Diagnostics) e as portas padrão RS232. O resultado é um CI
(Circuito Integrado) que pode buscar e converter automaticamente a maioria dos protocolos
em uso atualmente. O ELM327 requer poucos componentes externos para torná-lo um
circuito funcional e é produzido tendo como núcleo um microcontrolador da família
33
PIC18F2x8x da Microchip. A figura 12 apresenta. a pinagem do ELM-327. (Datasheet ELM
327).
- Scanners Automotivos
- Kits didáticos
- Leitores de DTCs (Diagnostic Trouble Codes – códigos de erros)
- Suporte a 12 protocolos
- Baud rate da porta RS232 até 500kbps
- Busca automática por um protocolo
- Plenamente configurável com comandos AT
- Entrada para monitoramento da bateria
- Design CMOS de baixo consumo.
34
3.METODOLOGIA
Este capítulo mostra a metodologia utilizada para o desenvolvimento da ferramenta de
diagnóstico veicular automotivo.
3.2.1 Hardware
36
circuitos de condicionamento de sinais referentes à comunicação de cada protocolo, o circuito
regulador de tensão e a disponibilidade dos pinos 17 e 18 para a comunicação com o PIC
16F877A.
37
3.2.1.2 Microcontrolador PIC16F877A
A placa de experiências MCLAB2 possui um microcontrolador PIC16F877A de 40
pinos, que atende aos nossos requisitos, pois possui o módulo interno para a comunicação
USART, faz o controle para a escrita do LCD de 16X2 e tem portas suficientes para a
conexão das quatro teclas.
A figura 15 mostra o circuito básico para o funcionamento do microcontrolador. Os
capacitores C1 e C2 estão conectados ao cristal oscilador X1 de modo a formarem um circuito
oscilador de 4MHZ que será utilizado pelo microcontrolador para definir a sua velocidade de
processamento interno. A alimentação de 5V será fornecida pelo hardware de comunicação.
39
3.2.2 Software
Para a realização do software foi feita uma lista de requisitos, que foi formulada a
partir de uma analise feita do processo de comunicação realizada entre um veículo VW Polo,
o ELM 327 e um computador (ver figura 19).
Analisou-se o processo de comunicação instalando dois softwares em um computador.
O primeiro foi o software chamado OBD2SPY (ver figura 20), que está no CD que
acompanha o equipamento ELM327, e que tem a função de scanner automotivo e o outro foi
o HHD Free Serial Port Monitor para descobrirmos quais são os dados trocados entre o
software e o ELM327.
O foco desta primeira etapa foi o de interpretar as perguntas e as respostas obtidas pelo
software de diagnóstico a cada informação requisitada, para desta forma realizar o nosso
software.
Após a análise concluí-se que o código da troca de dados utilizada pelo Polo segue um
padrão estipulado pela norma SAE J1979, o que facilita o trabalho, uma vez que não é
necessário simular diversas condições de trabalho para se obter um código para cada
situação.
A comunicação com o ELM327 possui duas linhas de comando, a primeira é um
conjunto de comandos AT, que são utilizados para a configuração interna do ELM327, por
exemplo: reset o chip utiliza-se o comando AT Z , a segunda são os comandos utilizados
para se obter as informações do veículo, que no caso do POLO segue o padrão da norma
SAEJ1979.
Toda vez que se envia um pacote de dados para o ELM327 o último dado deve ser um
caracter simples de retorno, que segundo a tabela ASCII é 0x0D(hexadecimal), desta forma
ele compreende que a informação chegou ao fim. Após serem enviados os dados para o
ELM327 deve se esperar até que este responda com um caractere „>‟(0x3E), que significa que
ele está pronto para receber uma nova mensagem. A figura 21 abaixo representa o processo de
aquisição dos valores da pressão no coletor de admissão e a rotação do veículo.
40
Figura 19:Esquema de ligação do ELM327.
(Fonte http://www.elec-intro.com/obd-ii-tool )
41
Figura 21: Aquisição de dados Software de monitoramento.
42
Posição da Válvula Borboleta 01 11 41 11 00
Observa-se que os dois primeiros caracteres das mensagens de aquisição „0‟ e „1‟, são
respondidos por „4‟ e „1‟ seguidos por mais 2 caracteres que correspondem ao parâmetro de
leitura desejado, estes quatro primeiros caracteres servem para requisitar a mensagem e para
verificar se a mensagem que está chegando é a correta, os caracteres subseqüentes dos quatro
primeiros representam o valor real do parâmetro de leitura desejado, mas para cada parâmetro
é necessário um tratamento diferente.
No software utilizamos a função printf( ) (utilizada para possibilitar a saída de dados
na linguagem C, onde os dados são direcionados para o dispositivo padrão de saida, que no
caso do microcontrolador PIC é a porta serial) para o envio das mensagens e a função getc()
(utilizada para a entrada de dados, através da porta serial, esta função aguarda a chegada de
uma caractere através da porta serial), para a armazená-las em uma matriz, toda vez que uma
mensagem é recebida pelo microcontrolador ela é armazenada nesta matriz e logo em seguida
é realizada uma função para o tratamento destes dados que alocara as informações pertinentes
para as suas respectivas variáveis.
A função Envia( ) foi construída com o intuito de tornar mais fácil o processo de
programação, como todas as mensagens enviadas possuem no máximo 5 caracteres, contando
com o caractere de retorno, esta função contém 5 entradas (a,b,c,d,e) para inserir a mensagem
que será enviada 1entrada(f) que indica o tamanho da mensagem. A função pode ser vista na
figura 21.
Quando um dado de uma resposta precisa ser tratado ele passa pela função ASCII( );
Esta função converte um valor inicial em um valor diferente daquele representado na tabela
ASCII( ). A figura abaixo apresenta esta função.
44
Figura 24: Função Ascii
45
3.2.2.2.1 Design detalhado
3.2.2.2.1.1 Inicialização.
Nesta parte é enviada ao ELM327 mensagens para a sua configuração interna e uma
solicitação para ver quantos códigos de erro a ECU possui atualmente. No display é mostrado
as frases INICIALIZANDO e CARSCANNER V2. 0.
As mensagens enviadas e as respostas obtidas conforme tabela 5 são:
Tabela 5: Inicialização
Mensagem Resposta
ATZ . ATZ...ELM327 V1.5..>
01 01 41 01 00 06 61 60 ..>
Nesta fase é enviada para ECU mensagens de requisição das mensagens que contém
os valores dos parâmetros de leitura, a tabela 6 apresenta as mensagens enviadas e lidas pelo
microcontrolador durante um teste.
Tabela 6: Exemplo de Mensagens enviadas e recebidas
Mensagem Resposta
010B 41 0B 5B ..>
010C 41 0C 1A F8 ..>
010D 41 0D 45 ..>
010E 41 0E B3 ..>
46
010F 41 0F 55 ..>
0111 41 11 43.. >
48
Figura 30: Tratamento de dados do Avanço da Ignição
49
3.2.2.2.1.3 Códigos de falha DTC.
Nesta parte é enviada para ECU a mensagens de requisição dos códigos de erro, a
tabela 7 apresenta a mensagem enviada e a lida pelo microcontrolador durante um teste.
Tabela 7: Exemplo de Requisição de códigos de falha
Mensagem Resposta
03 43 02 01 01 13 0000..>
50
3.2.2.2.14 Apagar DTC
Nesta fase é enviada para ECU as mensagens para apagar a memória dos códigos de
falhas da ECU.
Tabela 8: Requisição para apagar memória
Mensagem Resposta
04 44..>
51
4. ANÁLISE DOS RESULTADOS
4.1 Simulação.
52
04. 44 ..> OK
Durante está simulação todos os valores esperados foram obtidos com sucesso
mostrando que a ferramenta de diagnóstico cumpre quase todos os requisitos, pois com a
simulação não é possível testar a função de apagar a memória de códigos de falhas da unidade
de controle do motor.
53
Observar se ao apertar o acelerador do veículo até o seu fim o valor da
posição da válvula borboleta visualizada no display mostra 100%;
Observar que conforme a rotação aumenta ocorrem alterações no valor
do avanço da ignição visualizado no display;
Observar que conforme a rotação aumenta a pressão no coletor de
admissão diminui;
Observar alterações no valor da temperatura do ar;
6. Encerrar a leitura de parâmetros;
7. Iniciar a sessão de códigos de falhas;
8. Ver quantos códigos de falhas a unidade de controle possui, neste caso é para
ela indicar que o veículo possui pelo menos um erro pois sabe-se que o veículo está
com mau funcionamento no circuito da válvula injetora do cilindro 1;
9. Ver os códigos de falha, como dito anteriormente nesta etapa deve ser
visualizado pelo menos o código de falha P0201.
10. Apagar os códigos de falha da unidade eletrônica do veículo.
11. Desligar o veículo.
12. Desligar a ferramenta de diagnóstico automotivo
13. Ligar o veículo.
14. Ligar a ferramenta de diagnóstico automotivo
15. Iniciar a sessão de códigos de falhas, nesta etapa o veículo deve apresentar zero
códigos de falhas, pois a memória de códigos de falhas da unidade de controle do
motor foi apagada anteriormente.
16. Desligar o veículo
17. Desligar a ferramenta de diagnóstico
18. Encerrar testes.
4.3 Resultados
54
a ferramenta de diagnóstico automotiva e como através da simulação comprovamos que o
software está funcionando corretamente, todas as informações visualizadas no display estão
corretas.
A visualização da quantidade de códigos de falhas, a visualização dos códigos de
falhas e o processo de apagar os códigos de falhas funcionaram todos como o pretendido.
O funcionamento da ferramenta de diagnóstico na sessão de parâmetros de leituras
apresentou certa lentidão na atualização dos valores, devido à seleção da velocidade de
transmissão baixa de 9600 bits por segundo.
Pode se apenas visualizar 2 códigos de falhas.
Após apagar a memória do código de falhas da unidade eletrônica é necessário
desligar o veículo e a ferramenta de diagnóstico automotivo e religá-los para que a ferramenta
faça a leitura da quantidade de códigos de falhas, pois ela só faz isso quando ela esta
inicializando, o ideal seria que não fosse preciso realizar este processo para atualizar a
informação da quantidade de códigos de falhas que a unidade de controle do motor possui.
Houve a tentativa de utilizar a ferramenta de diagnóstico automotivo em um veículo
da fabricante FORD, um Fiesta 2008, a tentativa não houve êxito, pois o veículo não utiliza
somente a norma SAEJ1979 na camada de aplicação, ele utiliza a norma SAE J2190 em
conjunto com a norma SAE J1979.
55
Figura 36 : Tela Principal
Esta tela irá disponibilizar para o usuário a leitura dos códigos de falha.
56
Esta tela (figura 39), por exemplo, informa que o veículo não possui códigos de falha.
Esta tela (figura 40), por exemplo, informa ao usuário que o veículo possui 2 códigos
de falha.
57
5. CONCLUSÃO
Todo o processo, desde a pesquisa inicial até o termino, foi muito instrutivo e além de
consolidar pontos da tecnologia aprendidos na FATEC, permitiu visualizar como é
organizado um projeto, seu desenvolvimento e nesse caso como se trabalha em grupo para
atingir um objetivo comum.
Pode-se dizer que, como é seu objetivo, o projeto de formatura mostra a consolidação
dos integrantes desse grupo como tecnólogos, capazes de, partindo de uma idéia, traçarem
uma projeto e, organizadamente, chegarem a uma conclusão satisfatória, nesse caso um
projeto funcional.
De maneira geral todas as características que motivaram o projeto e que foram citadas
nos objetivos desta monografia foram alcançadas com sucesso. Tanto a leitura das mensagens
de falhas quanto o monitoramento dos parâmetros do veículo durante o seu funcionamento
foram realizados de maneira extremamente satisfatória.
58
6. REFERÊNCIAS
DINIZ, Ivando; COLÓN, Diogo; SILVA, Bruno, AGUIAR, Felipe, Cássio; SILVA, Cirilo;
PALÁCIOS Silvio; Scanner Automotivo Wireless; Brasil; 2009.
59
HODEL, Kleber Nogueira; Notas de Aula da Disciplina de Redes de Comunicação
Veicular Ministrada ao Curso de Eletrônica Automotiva da Fatec Santo André; 2009.
International Organization for Standardization. ISO 14230-2 Keyword protocol 2000 Part 2:
Data link layer. ISO, 1996.
60
Society of Automotive Engineers. SAE J1939 - OBD Communications Compliance Test
Cases for Heavy Duty Components and Vehicles. SAE, 2009 .
Society of Automotive Engineers. SAE J1979 - E/E Diagnostic Test Modes. SAE, 1998.
Society of Automotive Engineers. SAE J2012 - Recommended Format and Messages for
Diagnostic Trouble Codes. SAE.
SOUZA, David Jose & LAVINIA; Nicolás Cesar; Conectando o PIC: Recursos
Avançados; Editora Érica, Brasil, 2003.
TOSI, Enzo Lorenzon; GALVÃO, Erick Bruno Santos; LIMA, Pedro Camargo;
Desenvolvimento de um Datalogger para aplicações Automotivas, Dissertação, USP, São
Paulo, 2008.
61
ANEXO
62
ANEXO A – Código do Programa.
.
////////////////////////////////////////////////////////////////////////////////
// TCC - Trabalho de Conclusão do Curso //
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// # Diretivas //
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
// Variaveis Globais //
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void Interrupcao(void);
void InitHw(void);
void InitVetores(void);
void Envia(char a, char b, char c, char d, char e, int f);
void Ascii(int a);
void Rotacao(void);
void RotacaoLcd(void);
void Temperatura(void);
void TemperaturaLcd(void);
64
void Ignicao(void);
void IgnicaoLcd(void);
void Pressao(void);
void PressaoLcd(void);
void Velocidade(void);
void VelocidadeLCD(void);
void Borboleta(void);
void BorboletaLCD(void);
void Controle(void);
void RecebeMask(char u, char w, char y, char z);
void Tela1(void);
void TelaP1(void);
void TelaP2(void);
void TelaP3(void);
void TelaD1(void);
void TelaD2(void);
void TelaD3(void);
void main(void);
void codigo1(void);
void codigo2(void);
void codigo3(void);
void main(void);
////////////////////////////////////////////////////////////////////////////////
// Interrupção do Timer 0 //
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
#int_timer0
void Interrupcao(void)
{
set_timer0(131+get_timer0());
if(Debouncing>0)
{
Debouncing--; // Decremento do Debouncing Botão S1.
}
if(Debouncing1>0)
{
Debouncing1--; // Decremento do Debouncing Botão S4.
}
if(Debouncing2>0)
{
Debouncing2--; // Decremento do Debouncing Botão S2.
}
if(Debouncing3>0)
65
{
Debouncing3--; // Decremento do Debouncing Botão S3.
}
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void InitHw(void)
{
enable_interrupts(global); // Habilita Interrupção Externa.
enable_interrupts(int_timer0);
setup_ccp2 (CCP_PWM); // Seleciona RC1 como Saída com PWM.
setup_ccp1 (CCP_PWM); // Seleciona RC2 como Saída com PWM.
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_8); // Utilizado para gerar.
set_tris_c(0xd1);
set_timer0(131); // Set o timer 0 (131)
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void InitVetores(void)
{
for(i=0;i<5;i++)
{
EnviaMensagem[i]=0;
}
for(i=0;i<16;i++)
{
RecebeDados1[i]=0;
}
}
////////////////////////////////////////////////////////////////////////////////
// Função Comando //
////////////////////////////////////////////////////////////////////////////////
void comando()
66
{
output_low(pin_e1);
output_low(pin_e0);
output_high(pin_e1);
delay_us(30);
output_low (pin_e1);
}
////////////////////////////////////////////////////////////////////////////////
// Função Escrita //
////////////////////////////////////////////////////////////////////////////////
void escrita()
{
output_high(pin_e0);
output_low(pin_e1);
output_high(pin_e1);
delay_us(30);
output_low(pin_e1);
delay_us(30);
}
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
void EscritaLCD(int a)
{
output_d(a);
escrita();
delay_us(40);
}
void ComandoLCD(int a)
{
output_d(a);
comando();
delay_us(40);
}
void LimpaLcd(void)
{
output_d(0X01);
67
comando();
delay_ms(5);
}
////////////////////////////////////////////////////////////////////////////////
// Preparação //
////////////////////////////////////////////////////////////////////////////////
void Preparacao()
{
delay_ms(15); // Aguarda 15 ms.
output_d(0X30); // Envia o comando para do Display.
comando();
delay_ms(4); // Aguarda 4 ms.
output_d(0X30); // Envia o comando novamente para o Display.
comando();
delay_us(100);
output_d(0X30); // Envia o comando novamente para o Display.
comando();
delay_us(40);
output_d(0X38); // Envia o comando novamente para o Display.
comando();
delay_us(40);
output_d(0X01); // Envia o comando novamente para o Display.
comando();
delay_us(1800);
output_d(0X0C); // Envia o comando novamente para o Display.
comando();
delay_us(40);
output_d(0X06); // Envia o comando novamente para o Display.
comando();
delay_us(40);
}
////////////////////////////////////////////////////////////////////////////////
// # ENVIA //
////////////////////////////////////////////////////////////////////////////////
68
}
}
////////////////////////////////////////////////////////////////////////////////
// # ASCII //
////////////////////////////////////////////////////////////////////////////////
void Ascii(int a)
{
switch (a)
{
case 0x30 : Rp = 0;break;
case 0x31 : Rp = 1;break;
case 0x32 : Rp = 2;break;
case 0x33 : Rp = 3;break;
case 0x34 : Rp = 4;break;
case 0x35 : Rp = 5;break;
case 0x36 : Rp = 6;break;
case 0x37 : Rp = 7;break;
case 0x38 : Rp = 8;break;
case 0x39 : Rp = 9;break;
case 0x41 : Rp = 10;break;
case 0x42 : Rp = 11;break;
case 0x43 : Rp = 12;break;
case 0x44 : Rp = 13;break;
case 0x45 : Rp = 14;break;
case 0x46 : Rp = 15;break;
}
}
////////////////////////////////////////////////////////////////////////////////
// # ROTAÇÃO //
////////////////////////////////////////////////////////////////////////////////
void Rotacao(void)
{
Ascii(RecebeDados1[4]);
Dadoa = Rp;
Ascii(RecebeDados1[5]);
Dadob = Rp;
69
Dadoa = Dadoa << 4;
Dadoc = Dadoa | Dadob;
Ascii(RecebeDados1[6]);
Dadoa = Rp;
Ascii(RecebeDados1[7]);
Dadob = Rp;
Dadoa = Dadoa << 4;
Dadod = Dadoa | Dadob;
Dadoc =Dadoc << 8;
Rpm = Dadoc | Dadod;
Rpm = (Rpm/4);
void RotacaoLcd(void)
{
Mil = Rpm/1000;
Cent = (Rpm%1000)/100;
Dez = ((Rpm%1000)%100)/10;
Uni = ((Rpm%1000)%100)%10;
EscritaLCD(0x30 + Mil);
EscritaLCD(0x30 + Cent);
EscritaLCD(0x30 + Dez);
EscritaLCD(0x30 + Uni);
}
void Temperatura(void)
{
Ascii(RecebeDados1[4]);
Dadoa = Rp;
Ascii(RecebeDados1[5]);
Dadob = Rp;
Dadoa = Dadoa << 4;
TpAr = Dadoa | Dadob;
TpAr = TpAr - 40;
70
void TemperaturaLcd(void)
{
int Cent, Dez, Uni;
Dez = (TpAr%100)/10;
Uni = (TpAr%100)%10;
EscritaLCD(0x30 + Dez);
EscritaLCD(0x30 + Uni);
EscritaLCD('C');
}
void Ignicao(void)
{
Envia('0', '1', '0','E','\r',5);
RecebeMask(0x36,0x32,0x30,0x30);
Ascii(RecebeDados1[4]);
Dadoa = Rp;
Ascii(RecebeDados1[5]);
Dadob = Rp;
Dadoa = Dadoa << 4;
Ign = Dadoa | Dadob;
Ign = (Ign/2)-64;
}
void IgnicaoLcd(void)
{
int Cent, Dez, Uni;
Dez = (Ign%100)/10;
Uni = (Ign%100)%10;
EscritaLCD(0x30 + Dez);
EscritaLCD(0x30 + Uni);
}
void Pressao(void)
{
Ascii(RecebeDados1[4]);
Dadoa = Rp;
Ascii(RecebeDados1[5]);
Dadob = Rp;
Dadoa = Dadoa << 4;
Kp = Dadoa | Dadob;
}
void PressaoLcd(void)
{
71
int Cent, Dez, Uni;
Cent = Kp/100;
Dez = (Kp%100)/10;
Uni = (Kp%100)%10;
EscritaLCD(0x30 + Cent);
EscritaLCD(0x30 + Dez);
EscritaLCD(0x30 + Uni);
}
void Velocidade(void)
{
Envia('0', '1', '0','D','\r',5);
RecebeMask(0x36,0x32,0x30,0x30);
Ascii(RecebeDados1[4]);
Dadoa = Rp;
Ascii(RecebeDados1[5]);
Dadob = Rp;
Dadoa = Dadoa << 4;
Km = Dadoa | Dadob;
}
void VelocidadeLCD(void)
{
int Cent, Dez, Uni;
Cent = Km/100;
Dez = (Km%100)/10;
Uni = (Km%100)%10;
EscritaLCD(0x30 + Cent);
EscritaLCD(0x30 + Dez);
EscritaLCD(0x30 + Uni);
}
void Borboleta(void)
{
Envia('0', '1', '1','1','\r',5);
RecebeMask(0x36,0x32,0x30,0x30);
Ascii(RecebeDados1[4]);
Dadoa = Rp;
Ascii(RecebeDados1[5]);
Dadob = Rp;
Dadoa = Dadoa << 4;
Ped = Dadoa | Dadob;
Ped = (Ped*100)/255;
}
void BorboletaLCD(void)
{
int Cent, Dez, Uni;
72
Cent = Ped/100;
Dez = (Ped%100)/10;
Uni = (Ped%100)%10;
EscritaLCD(0x30 + Cent);
EscritaLCD(0x30 + Dez);
EscritaLCD(0x30 + Uni);
}
void falha(void)
{
QTD = RecebeDados1[5];
}
void Codigo1(void)
{
DTC1 = RecebeDados1[2];
if(DTC1 == 0x30)
{
DTC1 = 'P';
}
if(DTC1 == 0x34)
{
DTC1 = 'C';
}
if(DTC1 == 0x43)
{
DTC1 = 'B';
}
if(DTC1 == 0x38)
{
DTC1 = 'U';
EscritaLCD(DTC1);
EscritaLCD(0x30);
for(i=3;i<6;i++)
{
EscritaLCD(RecebeDados1[i]);
}
}
void Codigo2(void)
73
{
DTC1 = RecebeDados1[6];
if(DTC1 == 0x30)
{
DTC1 = 'P';
}
if(DTC1 == 0x34)
{
DTC1 = 'C';
}
if(DTC1 == 0x43)
{
DTC1 = 'B';
}
if(DTC1 == 0x38)
{
DTC1 = 'U';
EscritaLCD(DTC1);
EscritaLCD(0x30);
for(i=7;i<10;i++)
{
EscritaLCD(RecebeDados1[i]);
}
}
void Codigo3(void)
{
DTC1 = RecebeDados1[10];
if(DTC1 == 0x30)
{
DTC1 = 'P';
}
if(DTC1 == 0x34)
{
DTC1 = 'C';
74
if(DTC1 == 0x43)
{
DTC1 = 'B';
}
if(DTC1 == 0x38)
{
DTC1 = 'U';
EscritaLCD(DTC1);
EscritaLCD(0x30);
for(i=11;i<14;i++)
{
EscritaLCD(RecebeDados1[i]);
}
}
////////////////////////////////////////////////////////////////////////////////
// # Controle //
////////////////////////////////////////////////////////////////////////////////
void Controle(void)
{
if((!input(pin_b0)) && (!Flag1) && (!Debouncing))
{
Flag1 = 1;
Debouncing = 500;
}
if((Flag1) && (!Debouncing))
{
EstadoA--;
LimpaLCD();
Flag1 = 0;
Debouncing = 0;
}
if((!input(pin_b3)) && (!Flag2) && (!Debouncing1))
{
Flag2 = 1;
Debouncing1 = 500;
}
if((Flag2) && (!Debouncing1))
{
EstadoA ++;
LimpaLCD();
Flag2 = 0;
Debouncing1 = 0;
}
75
if((!input(pin_b1)) && (!Flag3) && (!Debouncing2))
{
Flag3 = 1;
Debouncing2 = 500;
}
if((Flag3) && (!Debouncing2))
{
Enter =1;
EstadoA = 0;
Flag3 = 0;
Debouncing2 = 0;
LimpaLCD();
}
if((!input(pin_b2)) && (!Flag4) && (!Debouncing3))
{
Flag4 = 1;
Debouncing3 = 500;
}
if((Flag4) && (!Debouncing3))
{
Enter =0;
EstadoA=0;
LimpaLCD();
Flag4 = 0;
Debouncing3 = 0;
}
}
////////////////////////////////////////////////////////////////////////////////
// # RECEBE //
////////////////////////////////////////////////////////////////////////////////
while(x == 0)
{
Flag0 = Kbhit();
if(Flag0==1)
{
dado = getc();
76
Flag0=0;
if(dado==0x3E)
{
if(RecebeDados1[0]== u)
{
M1=1;
}
if(RecebeDados1[1]== w)
{
M2=1;
}
if(RecebeDados1[2]== y)
{
M3=1;
}
if(RecebeDados1[3]== z)
{
M4=1;
}
if(M1==1 && M2==1 && M3==1 && M4==1)
{
At ++;
}
else
{
}
x=1;
}
if(dado != 0x20)
{
RecebeDados1[b]=dado;
b++;
}
void Tela1(void)
{
ComandoLCD(0x80);
for(i=0; i<10; i++)
{
77
EscritaLCD(String2[i]); // Envia o comando novamente para o Display.
}
ComandoLCD(0xC0);
for(i=0; i<3; i++)
{
EscritaLCD(String3[i]); // Envia o comando novamente para o Display.
}
}
void TelaP1(void)
{
ComandoLCD(0x80);
EscritaLCD('R');
EscritaLCD('P');
EscritaLCD('M');
ComandoLCD(0x89);
EscritaLCD('A');
EscritaLCD('i');
EscritaLCD('g');
ComandoLCD(0xC0);
EscritaLCD('T');
EscritaLCD('p');
EscritaLCD('A');
EscritaLCD('r');
ComandoLCD(0xC9);
EscritaLCD('k');
EscritaLCD('P');
EscritaLCD('a');
void TelaP2(void)
{
ComandoLCD(0x80);
EscritaLCD('T');
EscritaLCD('p');
EscritaLCD('A');
EscritaLCD('r');
ComandoLCD(0x89);
EscritaLCD('k');
EscritaLCD('P');
EscritaLCD('a');
ComandoLCD(0xC0);
EscritaLCD('K');
EscritaLCD('m');
EscritaLCD('/');
EscritaLCD('h');
ComandoLCD(0xC9);
EscritaLCD('%');
}
78
void TelaP3(void)
{
ComandoLCD(0x80);
EscritaLCD('K');
EscritaLCD('m');
EscritaLCD('/');
EscritaLCD('h');
ComandoLCD(0x89);
EscritaLCD('%');
ComandoLCD(0xC0);
EscritaLCD('R');
EscritaLCD('P');
EscritaLCD('M');
ComandoLCD(0xC9);
EscritaLCD('I');
EscritaLCD('g');
EscritaLCD('n');
}
void TelaD1(void)
{
ComandoLCD(0x80);
for(i=0; i<14; i++)
{
EscritaLCD(String5[i]);
}
ComandoLCD(0xC7);
for(i=0; i<3; i++)
{
EscritaLCD(String3[i]);
}
ComandoLCD(0xC5);
EscritaLCD(QTD);
}
void TelaD2(void)
{
ComandoLCD(0x85);
Codigo1();
ComandoLCD(0xC5);
Codigo2();
79
}
void TelaD3(void)
{
if(QTD >= 0x33)
{
ComandoLCD(0x85);
Codigo3();
}
ComandoLCD(0xC0);
EscritaLCD('A');
EscritaLCD('P');
EscritaLCD('A');
EscritaLCD('G');
EscritaLCD('A');
EscritaLCD('R');
EscritaLCD('?');
}
////////////////////////////////////////////////////////////////////////////////
// # Principal //
////////////////////////////////////////////////////////////////////////////////
void main(void)
{
InitHw();
Preparacao(); //Inicializa o display LCD.
while(true)
{
Controle();
if(Enter ==0)
{
if(EstadoA>2)
{
EstadoA = 1;
}
if(EstadoA<0)
{
EstadoA = 2;
}
switch(EstadoA)
80
{
case 0: if(Trava == 0)
{
ComandoLCD(0x81);
for(i=0; i<13; i++)
{
EscritaLCD(String1[i]); // Envia o comando
novamente para o Display.
}
ComandoLCD(0xC0);
for(i=0; i<15; i++)
{
EscritaLCD(String4[i]); // Envia o comando
novamente para o Display.
}
Envia('A','T','Z',0X0D,'0',4);
RecebeMask(0X00,0X00,0X00,0X00);
Envia('A','T','E','0',0X0D,5);
RecebeMask(0X00,0X00,0X00,0X00);
Envia('A','T','L','0',0X0D,5);
RecebeMask(0X00,0X00,0X00,0X00);
Envia('0','1','0','1',0X0D,5);
RecebeMask(0X34,0X31,0X30,0X31);
falha();
Trava = 1;
}
LimpaLCD();
EstadoA=2;
break;
case 1: Tela1();
ComandoLCD(0xCF);
EscritaLCD('<'); // Envia o comando novamente para o
Display.
EstadoB=2;
break;
case 2: Tela1();
ComandoLCD(0x8F);
EscritaLCD('<'); // Envia o comando novamente para o
Display.
81
EstadoB=1;
break;
}
}
if(Enter == 1 && EstadoB==1)
{
if(EstadoA>5)
{
EstadoA=0;
}
if(EstadoA<0)
{
EstadoA=5;
}
switch(EstadoA)
{
case 0:
ComandoLCD(0x8F);
EscritaLCD('<');
TelaP1();
if(EstadoA==0)
{
Rotacao();
ComandoLCD(0x83);
RotacaoLCD();
}
if(EstadoA==0)
{
Temperatura();
ComandoLCD(0xC4);
TemperaturaLCD();
}
if(EstadoA==0)
{
Ignicao();
ComandoLCD(0x8C);
IgnicaoLCD();
}
if(EstadoA==0)
{
Pressao();
ComandoLCD(0xCC);
PressaoLCD();
}
82
break;
case 1: ComandoLCD(0xCF);
EscritaLCD('<');
TelaP1();
if(EstadoA==1)
{
Rotacao();
ComandoLCD(0x83);
RotacaoLCD();
}
if(EstadoA==1)
{
Ignicao();
ComandoLCD(0x8C);
IgnicaoLCD();
}
if(EstadoA==1)
{
Temperatura();
ComandoLCD(0xC4);
TemperaturaLCD();
}
if(EstadoA==1)
{
Pressao();
ComandoLCD(0xCC);
PressaoLCD();
}
break;
case 2: TelaP2();
ComandoLCD(0x8F);
EscritaLCD('<');
if(EstadoA==2)
{
Temperatura();
ComandoLCD(0x84);
TemperaturaLCD();
}
if(EstadoA==2)
{
Pressao();
ComandoLCD(0x8C);
PressaoLCD();
}
if(EstadoA==2)
{
Velocidade();
83
ComandoLCD(0xC4);
VelocidadeLCD();
}
if(EstadoA==2)
{
Borboleta();
ComandoLCD(0xCA);
BorboletaLCD();
}
break;
case 3: TelaP2();
ComandoLCD(0xCF);
EscritaLCD('<');
if(EstadoA==3)
{
Temperatura();
ComandoLCD(0x84);
TemperaturaLCD();
}
if(EstadoA==3)
{
Pressao();
ComandoLCD(0x8C);
PressaoLCD();
}
if(EstadoA==3)
{
Velocidade();
ComandoLCD(0xC4);
VelocidadeLCD();
}
if(EstadoA==3)
{
Borboleta();
ComandoLCD(0xCA);
BorboletaLCD();
}
break;
case 4: TelaP3();
ComandoLCD(0x8F);
EscritaLCD('<');
if(EstadoA==4)
{
Velocidade();
ComandoLCD(0x84);
VelocidadeLCD();
}
if(EstadoA==4)
{
Borboleta();
84
ComandoLCD(0x8A);
BorboletaLCD();
}
if(EstadoA==4)
{
Rotacao();
ComandoLCD(0xC3);
RotacaoLCD();
}
if(EstadoA==4)
{
Ignicao();
ComandoLCD(0xCC);
IgnicaoLCD();
}
break;
case 5: TelaP3();
ComandoLCD(0xCF);
EscritaLCD('<');
if(EstadoA==5)
{
Velocidade();
ComandoLCD(0x84);
VelocidadeLCD();
}
if(EstadoA==5)
{
Borboleta();
ComandoLCD(0x8A);
BorboletaLCD();
}
if(EstadoA==5)
{
Rotacao();
ComandoLCD(0xC3);
RotacaoLCD();
}
if(EstadoA==5)
{
Ignicao();
ComandoLCD(0xCC);
IgnicaoLCD();
}
break;
}
}
if(Enter ==1 && EstadoB==2)
{
if(EstadoA>5)
{
85
EstadoA=0;
}
if(EstadoA<0)
{
EstadoA=0;
}
switch(EstadoA)
{
case 0: TelaD1();
ComandoLCD(0x8F);
break;
case 1: TelaD1();
ComandoLCD(0xCF);
EscritaLCD('<');
break;
case 2: Envia('0','3','\r','0','0',3);
RecebeMask(0X34,0X33,0X00,0X00);
TelaD2();
ComandoLCD(0x8F);
EscritaLCD('<');
break;
case 3: Envia('0','3','\r','0','0',3);
RecebeMask(0X34,0X33,0X00,0X00);
TelaD2();
ComandoLCD(0xCF);
EscritaLCD('<');
break;
case 4: TelaD3();
ComandoLCD(0x8F);
EscritaLCD('<');
break;
case 5: TelaD3();
ComandoLCD(0xCF);
EscritaLCD('<');
Envia('0','4','\r','0','0',3);
RecebeMask(0X34,0X34,0X00,0X00);
86
}
delay_ms(1000);
Enter =0;
break;
}
}
}
}
////////////////////////////////////////////////////////////////////////////////
// # FIM //
////////////////////////////////////////////////////////////////////////////////
87
ANEXO B – Datasheet ELM 327 – Comando AT.
88
89
ANEXO C – Lista com os DTC`s
(Fonte: http://www.obd-codes.com/trouble_codes)
90
P0043 HO2S Heater Control Circuit Low (Bank 1 Sensor 3)
P0044 HO2S Heater Control Circuit High (Bank 1 Sensor 3)
P0050 HO2S Heater Control Circuit (Bank 2 Sensor 1)
P0051 HO2S Heater Control Circuit Low (Bank 2 Sensor 1)
P0052 HO2S Heater Control Circuit High (Bank 2 Sensor 1)
P0053 HO2S Heater Resistance (Bank 1, Sensor 1)
P0054 HO2S Heater Resistance (Bank 1, Sensor 2)
P0055 HO2S Heater Resistance (Bank 1, Sensor 3)
P0056 HO2S Heater Control Circuit (Bank 2 Sensor 2)
P0057 HO2S Heater Control Circuit Low (Bank 2 Sensor 2)
P0058 HO2S Heater Control Circuit High (Bank 2 Sensor 2)
P0059 HO2S Heater Resistance (Bank 2, Sensor 1)
P0060 HO2S Heater Resistance (Bank 2, Sensor 2)
P0061 HO2S Heater Resistance (Bank 2, Sensor 3)
P0062 HO2S Heater Control Circuit (Bank 2 Sensor 3)
P0063 HO2S Heater Control Circuit Low (Bank 2 Sensor 3)
P0064 HO2S Heater Control Circuit High (Bank 2 Sensor 3)
P0065 Air Assisted Injector Control Range/Performance
P0066 Air Assisted Injector Control Circuit or Circuit Low
P0067 Air Assisted Injector Control Circuit High
P0068 MAP/MAF - Throttle Position Correlation
P0069 Manifold Absolute Pressure - Barometric Pressure Correlation
P0070 Ambient Air Temperature Sensor Circuit
P0071 Ambient Air Temperature Sensor Range/Performance
P0072 Ambient Air Temperature Sensor Circuit Low Input
P0073 Ambient Air Temperature Sensor Circuit High Input
P0074 Ambient Air Temperature Sensor Circuit Intermittent
P0075 Intake Valve Control Solenoid Circuit (Bank 1)
P0076 Intake Valve Control Solenoid Circuit Low (Bank 1)
P0077 Intake Valve Control Solenoid Circuit High (Bank 1)
P0078 Exhaust Valve Control Solenoid Circuit (Bank 1)
P0079 Exhaust Valve Control Solenoid Circuit Low (Bank 1)
P0080 Exhaust Valve Control Solenoid Circuit High (Bank 1)
P0081 Intake valve Control Solenoid Circuit (Bank 2)
P0082 Intake Valve Control Solenoid Circuit Low (Bank 2)
P0083 Intake Valve Control Solenoid Circuit High (Bank 2)
P0084 Exhaust Valve Control Solenoid Circuit (Bank 2)
P0085 Exhaust Valve Control Solenoid Circuit Low (Bank 2)
P0086 Exhaust Valve Control Solenoid Circuit High (Bank 2)
P0087 Fuel Rail/System Pressure - Too Low
P0088 Fuel Rail/System Pressure - Too High
P0089 Fuel Pressure Regulator 1 Performance
P0090 Fuel Pressure Regulator 1 Control Circuit
P0091 Fuel Pressure Regulator 1 Control Circuit Low
P0092 Fuel Pressure Regulator 1 Control Circuit High
P0093 Fuel System Leak Detected - Large Leak
P0094 Fuel System Leak Detected - Small Leak
P0095 Intake Air Temperature Sensor 2 Circuit
P0096 Intake Air Temperature Sensor 2 Circuit Range/Performance
91
P0097 Intake Air Temperature Sensor 2 Circuit Low
P0098 Intake Air Temperature Sensor 2 Circuit High
P0099 Intake Air Temperature Sensor 2 Circuit Intermittent/Erratic
P0100 Mass or Volume Air Flow Circuit Malfunction
P0101 Mass or Volume Air Flow Circuit Range/Performance Problem
P0102 Mass or Volume Air Flow Circuit Low Input
P0103 Mass or Volume Air Flow Circuit High Input
P0104 Mass or Volume Air Flow Circuit Intermittent
P0105 Manifold Absolute Pressure/Barometric Pressure Circuit Malfunction
P0106 Manifold Absolute Pressure/Barometric Pressure Circuit Range/Performance
P0107 Manifold Absolute Pressure/Barometric Pressure Circuit Low Input
P0108 Manifold Absolute Pressure/Barometric Pressure Circuit High Input
P0109 Manifold Absolute Pressure/Barometric Pressure Circuit Intermittent
P0110 Intake Air Temperature Circuit Malfunction
P0111 Intake Air Temperature Circuit Range/Performance Problem
P0112 Intake Air Temperature Circuit Low Input
P0113 Intake Air Temperature Circuit High Input
P0114 Intake Air Temperature Circuit Intermittent
P0115 Engine Coolant Temperature Circuit Malfunction
P0116 Engine Coolant Temperature Circuit Range/Performance Problem
P0117 Engine Coolant Temperature Circuit Low Input
P0118 Engine Coolant Temperature Circuit High Input
P0119 Engine Coolant Temperature Circuit Intermittent
P0120 Throttle Position Sensor/Switch A Circuit Malfunction
P0121 Throttle Position Sensor/Switch A Circuit Range/Performance Problem
P0122 Throttle Position Sensor/Switch A Circuit Low Input
P0123 Throttle Position Sensor/Switch A Circuit High Input
P0124 Throttle Position Sensor/Switch A Circuit Intermittent
P0125 Insufficient Coolant Temperature for Closed Loop Fuel Control
P0126 Insufficient Coolant Temperature for Stable Operation
P0128 Coolant Thermostat (Coolant Temperature Below Thermostat Regulating ture)
P0130 02 Sensor Circuit Malfunction (Bank I Sensor 1)
P0131 02 Sensor Circuit Low Voltage (Bank I Sensor I)
P0132 02 Sensor Circuit High Voltage (Bank I Sensor 1)
P0133 02 Sensor Circuit Slow Response (Bank 1 Sensor 1)
P0134 02 Sensor Circuit No Activity Detected (Bank I Sensor 1)
P0135 02 Sensor Heater Circuit Malfunction (Bank 1 Sensor 1)
P0136 02 Sensor Circuit Malfunction (Bank I Sensor 2)
P0137 02 Sensor Circuit Low Voltage (Bank I Sensor 2)
P0138 02 Sensor Circuit High Voltage (Bank I Sensor 2)
P0139 02 Sensor Circuit Slow Response (Bank 1 Sensor 2)
P0140 02 Sensor Circuit No Activity Detected (Bank 1 Sensor 2)
P0141 02 Sensor Heater Circuit Malfunction (Bank 1 Sensor 2)
P0142 02 Sensor Circuit Malfunction (Bank I Sensor 3)
P0143 02 Sensor Circuit Low Voltage (Bank I Sensor 3)
P0144 02 Sensor Circuit High Voltage (Bank I Sensor 3)
P0145 02 Sensor Circuit Slow Response (Bank 1 Sensor 3)
P0146 02 Sensor Circuit No Activity Detected (Bank I Sensor 3)
P0147 02 Sensor Heater Circuit Malfunction (Bank I Sensor 3)
92
P0150 02 Sensor Circuit Malfunction (Bank 2 Sensor I)
P0151 02 Sensor Circuit Low Voltage (Bank 2 Sensor I)
P0152 02 Sensor Circuit High Voltage (Bank 2 Sensor 1)
P0153 02 Sensor Circuit Slow Response (Bank 2 Sensor 1)
P0154 02 Sensor Circuit No Activity Detected (Bank 2 Sensor 1)
P0155 02 Sensor Heater Circuit Malfunction (Bank 2 Sensor 1)
P0156 02 Sensor Circuit Malfunction (Bank 2 Sensor 2)
P0157 02 Sensor Circuit Low Voltage (Bank 2 Sensor 2)
P0158 02 Sensor Circuit High Voltage (Bank 2 Sensor 2)
P0159 02 Sensor Circuit Slow Response (Bank 2 Sensor 2)
P0160 02 Sensor Circuit No Activity Detected (Bank 2 Sensor 2)
P0161 02 Sensor Heater Circuit Malfunction (Bank 2 Sensor 2)
P0162 02 Sensor Circuit Malfunction (Bank 2 Sensor 3)
P0163 02 Sensor Circuit Low Voltage (Bank 2 Sensor 3)
P0164 02 Sensor Circuit High Voltage (Bank 2 Sensor 3)
P0165 02 Sensor Circuit Slow Response (Bank 2 Sensor 3)
P0166 02 Sensor Circuit No Activity Detected (Bank 2 Sensor 3)
P0167 02 Sensor Heater Circuit Malfunction (Bank 2 Sensor 3)
P0170 Fuel Trim Malfunction (Bank 1)
P0171 System too Lean (Bank 1)
P0172 System too Rich (Bank 1)
P0173 Fuel Trim Malfunction (Bank 2)
P0174 System too Lean (Bank 2)
P0175 System too Rich (Bank 2)
P0176 Fuel Composition Sensor Circuit Malfunction
P0177 Fuel Composition Sensor Circuit Range/Performance
P0178 Fuel Composition Sensor Circuit Low Input
P0179 Fuel Composition Sensor Circuit High Input
P0180 Fuel Temperature Sensor A Circuit Malfunction
P0181 Fuel Temperature Sensor A Circuit Range/Performance
P0182 Fuel Temperature Sensor A Circuit Low Input
P0183 Fuel Temperature Sensor A Circuit High Input
P0184 Fuel Temperature Sensor A Circuit Intermittent
P0185 Fuel Temperature Sensor B Circuit Malfunction
P0186 Fuel Temperature Sensor B Circuit Range/Performance
P0187 Fuel Temperature Sensor B Circuit Low Input
P0188 Fuel Temperature Sensor B Circuit High Input
P0189 Fuel Temperature Sensor B Circuit Intermittent
P0190 Fuel Rail Pressure Sensor Circuit Malfunction
P0191 Fuel Rail Pressure Sensor Circuit Range/Performance
P0192 Fuel Rail Pressure Sensor Circuit Low Input
P0193 Fuel Rail Pressure Sensor Circuit High Input
P0194 Fuel Rail Pressure Sensor Circuit Intermittent
P0195 Engine Oil Temperature Sensor Malfunction
P0196 Engine Oil Temperature Sensor Range/Performance
P0197 Engine Oil Temperature Sensor Low
P0198 Engine Oil Temperature Sensor High
P0199 Engine Oil Temperature Sensor Intermittent
P0200 Injector Circuit Malfunction
93
P0201 Injector Circuit Malfunction - Cylinder 1
P0202 Injector Circuit Malfunction - Cylinder 2
P0203 Injector Circuit Malfunction - Cylinder 3
P0204 Injector Circuit Malfunction - Cylinder 4
P0205 Injector Circuit Malfunction - Cylinder 5
P0206 Injector Circuit Malfunction - Cylinder 6
P0207 Injector Circuit Malfunction - Cylinder 7
P0208 Injector Circuit Malfunction - Cylinder 8
P0209 Injector Circuit Malfunction - Cylinder 9
P0210 Injector Circuit Malfunction - Cylinder 10
P0211 Injector Circuit Malfunction - Cylinder 11
P0212 Injector Circuit Malfunction - Cylinder 12
P0213 Cold Start Injector 1 Malfunction
P0214 Cold Start Injector 2 Malfunction
P0215 Engine Shutoff Solenoid Malfunction
P0216 Injection Timing Control Circuit Malfunction
P0217 Engine Overtemp Condition
P0218 Transmission Over Temperature Condition
P0219 Engine Overspeed Condition
P0220 Throttle/Petal Position Sensor/Switch B Circuit Malfunction
P0221 Throttle/Petal Position Sensor/Switch B Circuit Range/Performance Problem
P0222 Throttle/Petal Position Sensor/Switch B Circuit Low Input
P0223 Throttle/Petal Position Sensor/Switch B Circuit High Input
P0224 Throttle/Petal Position Sensor/Switch B Circuit Intermittent
P0225 Throttle/Petal Position Sensor/Switch C Circuit Malfunction
P0226 Throttle/Petal Position Sensor/Switch C Circuit Range/Performance Problem
P0227 Throttle/Petal Position Sensor/Switch C Circuit Low Input
P0228 Throttle/Petal Position Sensor/Switch C Circuit High Input
P0229 Throttle/Petal Position Sensor/Switch C Circuit Intermittent
P0230 Fuel Pump Primary Circuit Malfunction
P0231 Fuel Pump Secondary Circuit Low
P0232 Fuel Pump Secondary Circuit High
P0233 Fuel Pump Secondary Circuit Intermittent
P0234 Engine Overboost Condition
P0235 Turbocharger Boost Sensor A Circuit Malfunction
P0236 Turbocharger Boost Sensor A Circuit Range/Performance
P0237 Turbocharger Boost Sensor A Circuit Low
P0238 Turbocharger Boost Sensor A Circuit High
P0239 Turbocharger Boost Sensor B Malfunction
P0240 Turbocharger Boost Sensor B Circuit Range/Performance
P0241 Turbocharger Boost Sensor B Circuit Low
P0242 Turbocharger Boost Sensor B Circuit High
P0243 Turbocharger Wastegate Solenoid A Malfunction
P0244 Turbocharger Wastegate Solenoid A Range/Performance
P0245 Turbocharger Wastegate Solenoid A Low
P0246 Turbocharger Wastegate Solenoid A High
P0247 Turbocharger Wastegate Solenoid B Malfunction
P0248 Turbocharger Wastegate Solenoid B Range/Performance
P0249 Turbocharger Wastegate Solenoid B Low
94
P0250 Turbocharger Wastegate Solenoid B High
P0251 Injection Pump Fuel Metering Control "A" Malfunction (Cam/Rotor/Injector)
P0252 Injection Pump Fuel Metering Control "A" Range/Performance
P0253 Injection Pump Fuel Metering Control "A" Low (Cam/Rotor/Injector)
P0254 Injection Pump Fuel Metering Control "A" High (Cam/Rotor/Injector)
P0255 Injection Pump Fuel Metering Control "A" Intermittent (Cam/Rotor/Injector)
P0256 Injection Pump Fuel Metering Control "B" Malfunction (Cam/Rotor/Injector)
P0257 Injection Pump Fuel Metering Control "B" Range/Performance Injector)
P0258 Injection Pump Fuel Metering Control "B" Low (Cam/R
P0259 Injection Pump Fuel Metering Control "B" High (Cam/R
P0260 Injection Pump Fuel Metering Control "B" Intermittent Injector)
P0261 Cylinder I Injector Circuit Low
P0262 Cylinder I Injector Circuit High
P0263 Cylinder I Contribution/Balance Fault
P0264 Cylinder 2 Injector Circuit Low
P0265 Cylinder 2 Injector Circuit High
P0266 Cylinder 2 Contribution/Balance Fault
P0267 Cylinder 3 Injector Circuit Low
P0268 Cylinder 3 Injector Circuit High
P0269 Cylinder 3 Contribution/Balance Fault
P0270 Cylinder 4 Injector Circuit Low
P0271 Cylinder 4 Injector Circuit High
P0272 Cylinder 4 Contribution/Balance Fault
P0273 Cylinder 5 Injector Circuit Low
P0274 Cylinder 5 Injector Circuit High
P0275 Cylinder S Contribution/Balance Fault
P0276 Cylinder 6 Injector Circuit Low
P0277 Cylinder 6 Injector Circuit High
P0278 Cylinder 6 Contribution/Balance Fault
P0279 Cylinder 7 Injector Circuit Low
P0280 Cylinder 7 Injector Circuit High
P0281 Cylinder 7 Contribution/Balance Fault
P0282 Cylinder 8 Injector Circuit Low
P0283 Cylinder 8 Injector Circuit High
P0284 Cylinder 8 Contribution/Balance Fault
P0285 Cylinder 9 Injector Circuit Low
P0286 Cylinder 9 Injector Circuit High
P0287 Cylinder 9 Contribution/Balance Fault
P0288 Cylinder 10 Injector Circuit Low
P0289 Cylinder 10 Injector Circuit High
P0290 Cylinder 10 Contribution/Balance Fault
P0291 Cylinder 11 Injector Circuit Low
P0292 Cylinder 11 Injector Circuit High
P0293 Cylinder 11 Contribution/Balance Fault
P0294 Cylinder 12 Injector Circuit Low
P0295 Cylinder 12 Injector Circuit High
P0296 Cylinder 12 Contribution/Range Fault
P0300 Random/Multiple Cylinder Misfire Detected
P0301 Cylinder 1 Misfire Detected
95
P0302 Cylinder 2 Misfire Detected
P0303 Cylinder 3 Misfire Detected
P0304 Cylinder 4 Misfire Detected
P0305 Cylinder 5 Misfire Detected
P0306 Cylinder 6 Misfire Detected
P0307 Cylinder 7 Misfire Detected
P0308 Cylinder 8 Misfire Detected
P0309 Cylinder 9 Misfire Detected
P0310 Cylinder 10 Misfire Detected
P0311 Cylinder 11 Misfire Detected
P0312 Cylinder 12 Misfire Detected
P0313 Misfire Detected with Low Fuel
P0314 Single Cylinder Misfire (Cylinder not Specified)
P0315 Crankshaft Position System Variation Not Learned
P0316 Misfire Detected On Startup (First 1000 Revolutions)
P0317 Rough Road Hardware Not Present
P0318 Rough Road Sensor A Signal Circuit
P0319 Rough Road Sensor B Signal Circuit
P0320 Ignition/Distributor Engine Speed Input Circuit Malfunction
P0321 Ignition/Distributor Engine Speed Input Circuit Range/Performance
P0322 Ignition/Distributor Engine Speed Input Circuit No Signal
P0323 Ignition/Distributor Engine Speed Input Circuit Intermittent
P0325 Knock Sensor 1 Circuit Malfunction (Bank I or Single Sensor)
P0326 Knock Sensor 1 Circuit Range/Performance (Bank 1 or Single Sensor)
P0327 Knock Sensor 1 Circuit Low Input (Bank I or Single Sensor)
P0328 Knock Sensor 1 Circuit High Input (Bank I or Single Sensor)
P0329 Knock Sensor 1 Circuit Intermittent (Bank 1 or Single Sensor)
P0330 Knock Sensor 2 Circuit Malfunction (Bank 2)
P0331 Knock Sensor 2 Circuit Range/Performance (Bank 2)
P0332 Knock Sensor 2 Circuit Low Input (Bank 2)
P0333 Knock Sensor 2 Circuit High Input (Bank 2)
P0334 Knock Sensor 2 Circuit Intermittent (Bank 2)
P0335 Crankshaft Position Sensor A Circuit Malfunction
P0336 Crankshaft Position Sensor A Circuit Range/Performance
P0337 Crankshaft Position Sensor A Circuit Low Input
P0338 Crankshaft Position Sensor A Circuit High Input
P0339 Crankshaft Position Sensor A Circuit Intermittent
P0340 Camshaft Position Sensor Circuit Malfunction
P0341 Camshaft Position Sensor Circuit Range/Performance
P0342 Camshaft Position Sensor Circuit Low Input
P0343 Camshaft Position Sensor Circuit High Input
P0344 Camshaft Position Sensor Circuit Intermittent
P0345 Camshaft Position Sensor A Circuit Malfunction (Bank 2)
P0346 Camshaft Position Sensor A Circuit Range/Performance (Bank 2)
P0347 Camshaft Position Sensor A Circuit Low Input (Bank 2)
P0348 Camshaft Position Sensor A Circuit High Input (Bank 2)
P0349 Camshaft Position Sensor A Circuit Intermittent (Bank 2)
P0350 Ignition Coil Primary/Secondary Circuit Malfunction
P0351 Ignition Coil A Primary/Secondary Circuit Malfunction
96
P0352 Ignition Coil B Primary/Secondary Circuit Malfunction
P0353 Ignition Coil C Primary/Secondary Circuit Malfunction
P0354 Ignition Coil D Primary/Secondary Circuit Malfunction
P0355 Ignition Coil E Primary/Secondary Circuit Malfunction
P0356 Ignition Coil F Primary/Secondary Circuit Malfunction
P0357 Ignition Coil G Primary/Secondary Circuit Malfunction
P0358 Ignition Coil H Primary/Secondary Circuit Malfunction
P0359 Ignition Coil I Primary/Secondary Circuit Malfunction
P0360 Ignition Coil J Primary/Secondary Circuit Malfunction
P0361 Ignition Coil K Primary/Secondary Circuit Malfunction
P0362 Ignition Coil L Primary/Secondary Circuit Malfunction
P0370 Timing Reference High Resolution Signal A Malfunction
P0371 Timing Reference High Resolution Signal A Too Many Pulses
P0372 Timing Reference High Resolution Signal A Too Few Pulses
P0373 Timing Reference High Resolution Signal A Intermittent/Erratic Pulses
P0374 Timing Reference High Resolution Signal A No Pulses
P0375 Timing Reference High Resolution Signal B Malfunction
P0376 Timing Reference High Resolution Signal B Too Many Pulses
P0377 Timing Reference High Resolution Signal B Too Few Pulses
P0378 Timing Reference High Resolution Signal B Intermittent/Erratic Pulses
P0379 Timing Reference High Resolution Signal B No Pulses
P0380 Glow Plug/Heater Circuit "A" Malfunction
P0381 Glow Plug/Heater Indicator Circuit Malfunction
P0382 Exhaust Gas Recirculation Flow Malfunction
P0385 Crankshaft Position Sensor B Circuit Malfunction
P0386 Crankshaft Position Sensor B Circuit Range/Performance
P0387 Crankshaft Position Sensor B Circuit Low Input
P0388 Crankshaft Position Sensor B Circuit High Input
P0389 Crankshaft Position Sensor B Circuit Intermittent
P0400 Exhaust Gas Recirculation Flow Malfunction
P0401 Exhaust Gas Recirculation Flow Insufficient Detected
P0402 Exhaust Gas Recirculation Flow Excessive Detected
P0403 Exhaust Gas Recirculation Circuit Malfunction
P0404 Exhaust Gas Recirculation Circuit Range/Performance
P0405 Exhaust Gas Recirculation Sensor A Circuit Low
P0406 Exhaust Gas Recirculation Sensor A Circuit High
P0407 Exhaust Gas Recirculation Sensor B Circuit Low
P0408 Exhaust Gas Recirculation Sensor B Circuit High
P0410 Secondary Air Injection System Malfunction
P0411 Secondary Air Injection System Incorrect Flow Detected
P0412 Secondary Air Injection System Switching Valve A Circuit Malfunction
P0413 Secondary Air Injection System Switching Valve A Circuit Open
P0414 Secondary Air Injection System Switching Valve A Circuit Shorted
P0415 Secondary Air Injection System Switching Valve B Circuit Malfunction
P0416 Secondary Air Injection System Switching Valve B Circuit Open
P0417 Secondary Air Injection System Switching Valve B Circuit Shorted
P0418 Secondary Air Injection System Relay "A" Circuit Malfunction
P0419 Secondary Air Injection System Relay "B" Circuit Malfunction
P0420 Catalyst System Efficiency Below Threshold (Bank 1)
97
P0421 Warm Up Catalyst Efficiency Below Threshold (Bank 1)
P0422 Main Catalyst Efficiency Below Threshold (Bank 1)
P0423 Heated Catalyst Efficiency Below Threshold (Bank 1)
P0424 Heated Catalyst Temperature Below Threshold (Bank 1)
P0430 Catalyst System Efficiency Below Threshold (Bank 2)
P0431 Warm Up Catalyst Efficiency Below Threshold (Bank 2)
P0432 Main Catalyst Efficiency Below Threshold (Bank 2)
P0433 Heated Catalyst Efficiency Below Threshold (Bank 2)
P0434 Heated Catalyst Temperature Below Threshold (Bank 2)
P0440 Evaporative Emission Control System Malfunction
P0441 Evaporative Emission Control System Incorrect Purge Flow
P0442 Evaporative Emission Control System Leak Detected (small leak)
P0443 Evaporative Emission Control System Purge Control Valve Circuit
P0444 Evaporative Emission Control System Purge Control Valve Circuit Open
P0445 Evaporative Emission Control System Purge Control Valve Circuit Shorted
P0446 Evaporative Emission Control System Vent Control Circuit Malfunction
P0447 Evaporative Emission Control System Vent Control Circuit Open
P0448 Evaporative Emission Control System Vent Control Circuit Shorted
P0449 Evaporative Emission Control System Vent Valve/Solenoid Circuit Malfunct
P0450 Evaporative Emission Control System Pressure Sensor Malfunction
P0451 Evaporative Emission Control System Pressure Sensor Range/Performance
P0452 Evaporative Emission Control System Pressure Sensor Low Input
P0453 Evaporative Emission Control System Pressure Sensor High Input
P0454 Evaporative Emission Control System Pressure Sensor Intermittent
P0455 Evaporative Emission Control System Leak Detected (gross leak)
P0456 Evaporative Emissions System Small Leak Detected
P0457 Evaporative Emission Control System Leak Detected
P0458 Evaporative Emission System Purge Control Valve Circuit Low
P0459 Evaporative Emission System Purge Control Valve Circuit High
P0460 Fuel Level Sensor Circuit Malfunction
P0461 Fuel Level Sensor Circuit Range/Performance
P0462 Fuel Level Sensor Circuit Low Input
P0463 Fuel Level Sensor Circuit High Input
P0464 Fuel Level Sensor Circuit Intermittent
P0465 Purge Flow Sensor Circuit Malfunction
P0466 Purge Flow Sensor Circuit Range/Performance
P0467 Purge Flow Sensor Circuit Low Input
P0468 Purge Flow Sensor Circuit High Input
P0469 Purge Flow Sensor Circuit Intermittent
P0470 Exhaust Pressure Sensor Malfunction
P0471 Exhaust Pressure Sensor Range/Performance
P0472 Exhaust Pressure Sensor Low
P0473 Exhaust Pressure Sensor High
P0474 Exhaust Pressure Sensor Intermittent
P0475 Exhaust Pressure Control Valve Malfunction
P0476 Exhaust Pressure Control Valve Range/Performance
P0477 Exhaust Pressure Control Valve Low
P0478 Exhaust Pressure Control Valve High
P0479 Exhaust Pressure Control Valve Intermittent
98
P0480 Cooling Fan I Control Circuit Malfunction
P0481 Cooling Fan 2 Control Circuit Malfunction
P0482 Cooling Fan 3 Control Circuit Malfunction
P0483 Cooling Fan Rationality Check Malfunction
P0484 Cooling Fan Circuit Over Current
P0485 Cooling Fan Power/Ground Circuit Malfunction
P0500 Vehicle Speed Sensor Malfunction
P0501 Vehicle Speed Sensor Range/Performance
P0502 Vehicle Speed Sensor Low Input
P0503 Vehicle Speed Sensor Intermittent/Erratic/High
P0505 Idle Control System Malfunction
P0506 Idle Control System RPM Lower Than Expected
P0507 Idle Control System RPM Higher Than Expected
P0510 Closed Throttle Position Switch Malfunction
P0520 Engine Oil Pressure Sensor/Switch Circuit Malfunction
P0521 Engine Oil Pressure Sensor/Switch Circuit Range/Performance
P0522 Engine Oil Pressure Sensor/Switch Circuit Low Voltage
P0523 Engine Oil Pressure Sensor/Switch Circuit High Voltage
P0530 A/C Refrigerant Pressure Sensor Circuit Malfunction
P0531 A/C Refrigerant Pressure Sensor Circuit Range/Performance
P0532 A/C Refrigerant Pressure Sensor Circuit Low Input
P0533 A/C Refrigerant Pressure Sensor Circuit High Input
P0534 Air Conditioner Refrigerant Charge Loss
P0550 Power Steering Pressure Sensor Circuit Malfunction
P0551 Power Steering Pressure Sensor Circuit Range/Performance
P0552 Power Steering Pressure Sensor Circuit Low Input
P0553 Power Steering Pressure Sensor Circuit High Input
P0554 Power Steering Pressure Sensor Circuit Intermittent
P0560 System Voltage Malfunction
P0561 System Voltage Unstable
P0562 System Voltage Low
P0563 System Voltage High
P0565 Cruise Control On Signal Malfunction
P0566 Cruise Control Off Signal Malfunction
P0567 Cruise Control Resume Signal Malfunction
P0568 Cruise Control Set Signal Malfunction
P0569 Cruise Control Coast Signal Malfunction
P0570 Cruise Control Accel Signal Malfunction
P0571 Cruise Control/Brake Switch A Circuit Malfunction
P0572 Cruise Control/Brake Switch A Circuit Low
P0573 Cruise Control/Brake Switch A Circuit High
P0574 Cruise Control Related Malfunction
P0575 Cruise Control Related Malfunction
P0576 Cruise Control Related Malfunction
P0576 Cruise Control Related Malfunction
P0578 Cruise Control Related Malfunction
P0579 Cruise Control Related Malfunction
P0580 Cruise Control Related Malfunction
P0600 Serial Communication Link Malfunction
99
P0601 Internal Control Module Memory Check Sum Error
P0602 Control Module Programming Error
P0603 Internal Control Module Keep Alive Memory (KAM) Error
P0604 Internal Control Module Random Access Memory (RAM) Error
P0605 Internal Control Module Read Only Memory (ROM) Error
P0606 PCM Processor Fault
P0607 Control Module Performance
P0608 Control Module VSS Output "A" Malfunction
P0609 Control Module VSS Output "B" Malfunction
P0620 Generator Control Circuit Malfunction
P0621 Generator Lamp "L" Control Circuit Malfunction
P0622 Generator Field "F" Control Circuit Malfunction
P0650 Malfunction Indicator Lamp (MIL) Control Circuit Malfunction
P0654 Engine RPM Output Circuit Malfunction
P0655 Engine Hot Lamp Output Control Circuit Malfunction
P0656 Fuel Level Output Circuit Malfunction
P0700 Transmission Control System Malfunction
P0701 Transmission Control System Range/Performance
P0702 Transmission Control System Electrical
P0703 Torque Converter/Brake Switch B Circuit Malfunction
P0704 Clutch Switch Input Circuit Malfunction
P0705 Transmission Range Sensor Circuit malfunction (PRNDL Input)
P0706 Transmission Range Sensor Circuit Range/Performance
P0707 Transmission Range Sensor Circuit Low Input
P0708 Transmission Range Sensor Circuit High Input
P0709 Transmission Range Sensor Circuit Intermittent
P0710 Transmission Fluid Temperature Sensor Circuit Malfunction
P0711 Transmission Fluid Temperature Sensor Circuit Range/Performance
P0712 Transmission Fluid Temperature Sensor Circuit Low Input
P0713 Transmission Fluid Temperature Sensor Circuit High Input
P0714 Transmission Fluid Temperature Sensor Circuit Intermittent
P0715 Input/Turbine Speed Sensor Circuit Malfunction
P0716 Input/Turbine Speed Sensor Circuit Range/Performance
P0717 Input/Turbine Speed Sensor Circuit No Signal
P0718 Input/Turbine Speed Sensor Circuit Intermittent
P0719 Torque Converter/Brake Switch B Circuit Low
P0720 Output Speed Sensor Circuit Malfunction
P0721 Output Speed Sensor Range/Performance
P0722 Output Speed Sensor No Signal
P0723 Output Speed Sensor Intermittent
P0724 Torque Converter/Brake Switch B Circuit High
P0725 Engine Speed input Circuit Malfunction
P0726 Engine Speed Input Circuit Range/Performance
P0727 Engine Speed Input Circuit No Signal
P0728 Engine Speed Input Circuit Intermittent
P0730 Incorrect Gear Ratio
P0731 Gear I Incorrect ratio
P0732 Gear 2 Incorrect ratio
P0733 Gear 3 Incorrect ratio
100
P0734 Gear 4 Incorrect ratio
P0735 Gear 5 Incorrect ratio
P0736 Reverse incorrect gear ratio
P0740 Torque Converter Clutch Circuit Malfunction
P0741 Torque Converter Clutch Circuit Performance or Stuck Off
P0742 Torque Converter Clutch Circuit Stock On
P0743 Torque Converter Clutch Circuit Electrical
P0744 Torque Converter Clutch Circuit Intermittent
P0745 Pressure Control Solenoid Malfunction
P0746 Pressure Control Solenoid Performance or Stuck Off
P0747 Pressure Control Solenoid Stuck On
P0748 Pressure Control Solenoid Electrical
P0749 Pressure Control Solenoid Intermittent
P0750 Shift Solenoid A Malfunction
P0751 Shift Solenoid A Performance or Stuck Off
P0752 Shift Solenoid A Stuck On
P0753 Shift Solenoid A Electrical
P0754 Shift Solenoid A Intermittent
P0755 Shift Solenoid B Malfunction
P0756 Shift Solenoid B Performance or Stock Off
P0757 Shift Solenoid B Stuck On
P0758 Shift Solenoid B Electrical
P0759 Shift Solenoid B Intermittent
P0760 Shift Solenoid C Malfunction
P0761 Shift Solenoid C Performance or Stuck Off
P0762 Shift Solenoid C Stuck On
P0763 Shift Solenoid C Electrical
P0764 Shift Solenoid C Intermittent
P0765 Shift Solenoid D Malfunction
P0766 Shift Solenoid D Performance or Stuck Off
P0767 Shift Solenoid D Stuck On
P0768 Shift Solenoid D Electrical
P0769 Shift Solenoid D Intermittent
P0770 Shift Solenoid E Malfunction
P0771 Shift Solenoid E Performance or Stuck Off
P0772 Shift Solenoid E Stuck On
P0773 Shift Solenoid E Electrical
P0774 Shift Solenoid E Intermittent
P0780 Shift Malfunction
P0781 1-2 Shift Malfunction
P0782 2-3 Shift Malfunction
P0783 3-4 Shift Malfunction
P0784 4-5 Shift Malfunction
P0785 Shift/Timing Solenoid Malfunction
P0786 Shift/Timing Solenoid Range/Performance
P0787 Shift/Timing Solenoid Low
P0788 Shift/Timing Solenoid High
P0789 Shift/Timing Solenoid Intermittent
P0790 Normal/Performance Switch Circuit Malfunction
101
P0801 Reverse Inhibit Control Circuit Malfunction
P0803 1-4 Upshift (Skip Shift) Solenoid Control Circuit Malfunction
P0804 1-4 Upshift (Skip Shift) Lamp Control Circuit Malfunction