Jag nöter på och klurar så jag blir tokig här men fattar inte vad jag missat denna gången.
Det gäller min XLR-kabeltestare igen.
Jag tar gärna emot alla tips som finns hur jag löser detta och hur jag får koden mer lättläslig.
Det borde ju kanske gå att klumpa ihop allt i funktioner men jag har inte så bra koll på det än.
Huvudproblemet är just nu att lysdioden som ska signalera att SHIELD_ADC får ADC-värde över 409 blir att lysa fast jag till och med
jordar den pinnen. Jag måste ha missat något.
Tanken är att en signal sänds på SEND_PIN_1 och läses av på SHIELD_ADC
sedan signal på SEND_SHIELD för att sedan läsas av på XLR1_ADC
Detta görs för att kolla att man inte missat att sätta bygel mellan dessa två i någon ände av kabeln.
Jag lägger upp koden och en skiss hur jag kopplat.
Det kan även vara kopplat fel men jag tycker jag extrakollat hundra gånger. Kanske brist i tankarna där också.
Kod: Markera allt
#include <avr/io.h>
#include <util/delay.h>
#include "xlr_tester.h"
static inline void initADC(void)
{
ADMUX |= (1<< REFS0);
ADCSRA |= (1<< ADPS1) | (1<< ADPS0);
ADCSRA |= (1<< ADEN);
}
uint16_t readADC(uint8_t channel)
{
ADMUX = (0xF0 & ADMUX) | channel;
ADCSRA |= (1<< ADSC);
loop_until_bit_is_clear(ADCSRA, ADSC);
return(ADC);
}
int main(void)
{
uint16_t adc_value_Pin1;
uint16_t adc_value_shield;
uint8_t result1, result2, result3, result4;
initADC();
TEST_DDR = 0x0F;
BLUE_LEDS_DDR = 0xDF;
LED_ADC_DDR = 0x07;
while (1)
{
ADC =0;
adc_value_shield =0;
adc_value_Pin1=0;
BLUE_LEDS_PORT = 0;
LED_ADC_PORT &= ~(RED_LED|GREEN_LED);
_delay_ms(500);
//--------------- send/read signal pin 1 ---------------------------------------------
TESTPORT|= SEND_PIN_1;
adc_value_shield= readADC(SHIELD_ADC);
if(adc_value_shield > 409 )
{
BLUE_LEDS_PORT|= OK_LED_1; // DETTA STEGET FUNKAR SOM DET SKA
result1 = 1;
}
else
{
BLUE_LEDS_PORT &= ~OK_LED_1;
result1 = 0;
}
_delay_ms(500);
TESTPORT &= ~SEND_PIN_1;
//----------------- send/ read shield signal--------------------------------------
BLUE_LEDS_PORT |= SEND_SHIELD;
adc_value_Pin1 = readADC(XLR1_ADC);
if(adc_value_Pin1 > 409)
{
BLUE_LEDS_PORT|= OK_LED_2; // FEL!!!! OK_LED_2 TÄNDS FAST PINNEN XLR1_ADC ÄR JORDAD
result2 = 1;
}
else
{
BLUE_LEDS_PORT &= ~OK_LED_2;
result2 = 0;
}
_delay_ms(500);
BLUE_LEDS_PORT &= ~SEND_SHIELD;
//------------------send/ read pin2 signal----------------------------------------
TESTPORT |= SEND_PIN_2;
_delay_ms(20);
if (TESTPIN == (SEND_PIN_2|RETURN_PIN_2))
{
BLUE_LEDS_PORT|= OK_LED_3;
result3 = 1;
}
else
{
BLUE_LEDS_PORT &= ~OK_LED_3;
result3 = 0;
}
_delay_ms(500);
TESTPORT &= ~SEND_PIN_2;
//----------------------send/read pin3 signal----------------------------------
TESTPORT |= SEND_PIN_3;
_delay_ms(20);
if(TESTPIN == (SEND_PIN_3|RETURN_PIN_3))
{
BLUE_LEDS_PORT |= OK_LED_4;
result4 = 1;
}
else
{
BLUE_LEDS_PORT &= ~OK_LED_4;
result4 = 0;
}
_delay_ms(500);
TESTPORT &= ~SEND_PIN_3;
if(result1 & result2 & result3 & result4)
{
LED_ADC_PORT |= GREEN_LED;
}
else
{
LED_ADC_PORT|= RED_LED;
}
_delay_ms(700);
}
return(0);
}