Witam,
Jestem poczatkujący w dziedzinie programowania nie jest to mój pierwszy program lecz mam z nim problem.Załączam schemat podzielony na dwie części co prawda rysowany ręcznie bo nie miałem inej możliwości ale tu nie o tym...
Ten projekt to zgrzewarka a raczej sterownik do zgrzewarki która wykonuje proste zadanie:
MIKRO SWITCH:
1-PC0 (+ dodaje cyfre na wyswietlaczu segmentowym)
2-PC1 (- odejmuje cyfre na wyświetlaczu)
3-PC2 (pedał nożny wykonuaje instrukcje zgrzania w wyznaczonym na wyswietlaczu czasie)
WYŚWIETLACZ:
1-100ms
2-200ms
...
9-900ms
0.-1000ms
np:
to znaczy gdy na wyświetlaczu jest 5 to po nacisnięciu pedała i jego zwolnieniu program wykonuje zgrzanie przez 0,5s
na schemacie widać diode IR jest to część transoptora narazie to niema zaczenia do testów zastosowałem zwykłego leda
Problem polega na tym że gdy odpalam program wyświetlacz jest czysty, gdy nacisne '+' pokazuje sie '1' i dźwiek, gdzy ponownie nacise '+' tylko dźwięk na wyświetlaczu zostaje '1'.
Gdy nacisne '-' na wyswietlaczu pokazuje się '8' i dżwięk, gdy ponownie nacisne '-' jest tylko dźwięk a na wyświetlaczu zostaje '8'
Gdy wcisne pedal nożny na na '1' lub na '8' to i tak czas świeceia testowej diody Led jest dłuższy niż przewidywany...
prosze o pomoc, podpowiedzi, naprowadzenia lub konkretne przykłady z góry dziękuje pawelek1990
PS
tu jeszcze foto całośći na płytce stykowej:
![[ATMEGA8][C] Sterownik do zgrzewarki [ATMEGA8][C] Sterownik do zgrzewarki](https://obrazki.elektroda.pl/28_1284289162_thumb.jpg)
Jestem poczatkujący w dziedzinie programowania nie jest to mój pierwszy program lecz mam z nim problem.Załączam schemat podzielony na dwie części co prawda rysowany ręcznie bo nie miałem inej możliwości ale tu nie o tym...
Ten projekt to zgrzewarka a raczej sterownik do zgrzewarki która wykonuje proste zadanie:
MIKRO SWITCH:
1-PC0 (+ dodaje cyfre na wyswietlaczu segmentowym)
2-PC1 (- odejmuje cyfre na wyświetlaczu)
3-PC2 (pedał nożny wykonuaje instrukcje zgrzania w wyznaczonym na wyswietlaczu czasie)
WYŚWIETLACZ:
1-100ms
2-200ms
...
9-900ms
0.-1000ms
np:
to znaczy gdy na wyświetlaczu jest 5 to po nacisnięciu pedała i jego zwolnieniu program wykonuje zgrzanie przez 0,5s
na schemacie widać diode IR jest to część transoptora narazie to niema zaczenia do testów zastosowałem zwykłego leda
#define F_CPU 4000000L
#include <avr/io.h>
#include <util/delay.h>
// -- 7 -- 1-PD7
// | | 2-PD6
// 9 6 3-VCC
// | | 3,8-VCC 4-PD5
// ---10-- 5-PD4
// | | 6-PD3
// 1 4 7-PD2
// | | 8-VCC
// -- 2 -- o 5 9-PD1
// 10-PD0
#define WYS_0 0x00 // 0000 0000
#define WYS_1 0x28 // 0010 1000
#define WYS_2 0xcd // 1100 1101
#define WYS_3 0x6d // 0110 1101
#define WYS_4 0x2b // 0010 1011
#define WYS_5 0x67 // 0110 0111
#define WYS_6 0xe7 // 1110 0111
#define WYS_7 0x2c // 0010 1100
#define WYS_8 0xef // 1110 1111
#define WYS_9 0x6f // 0110 1111
#define WYS_10 0xfe // 1111 1110
#define BUZZ 0x01 // 0000 0001
#define TOPTON 0x02 // 0000 0010
#define TOPTOFF 0x00 // 0000 0000
#define SW_1 0x01 // 0000 0001
#define SW_2 0x02 // 0000 0010
#define SW_3 0x04 // 0000 0100
int main(void)
{
DDRD = 0xff; //1111 1111
PORTD = 0xff; //1111 1111
DDRB = 0x03; //0000 0011
PORTB = 0x03; //0000 0011
DDRC = 0x00; //0000 0000
PORTC = 0x07; //0000 0111
while(1)
{
if(!(PINC & SW_1))
{
if(PORTD & ~WYS_10)
{
PORTB |= BUZZ;
_delay_ms(100);
PORTB &= ~BUZZ;
}
if(PORTD & ~WYS_9)
{
PORTD = ~WYS_10;
}
if(PORTD & ~WYS_8)
{
PORTD = ~WYS_9;
}
if(PORTD & ~WYS_7)
{
PORTD = ~WYS_8;
}
if(PORTD & ~WYS_6)
{
PORTD = ~WYS_7;
}
if(PORTD & ~WYS_5)
{
PORTD = ~WYS_6;
}
if(PORTD = ~WYS_4)
{
PORTD = ~WYS_5;
}
if(PORTD = WYS_3)
{
PORTD = ~WYS_4;
}
if(PORTD = WYS_2)
{
PORTD = ~WYS_3;
}
if(PORTD = WYS_1)
{
PORTD = ~WYS_2;
}
if(PORTD = ~WYS_0)
{
PORTD = ~WYS_1;
}
_delay_ms(80);
while(!(PINC & SW_1)) {}
_delay_ms(80);
}
if(!(PINC & SW_2))
{
if(PORTD & ~WYS_1)
{
PORTB |= BUZZ;
_delay_ms(100);
PORTB &= ~BUZZ;
}
if(PORTD & ~WYS_2)
{
PORTD = ~WYS_1;
}
if(PORTD & ~WYS_3)
{
PORTD = ~WYS_2;
}
if(PORTD & ~WYS_4)
{
PORTD = ~WYS_3;
}
if(PORTD & ~WYS_5)
{
PORTD = ~WYS_4;
}
if(PORTD & ~WYS_6)
{
PORTD = ~WYS_5;
}
if(PORTD & ~WYS_7)
{
PORTD = ~WYS_6;
}
if(PORTD & ~WYS_8)
{
PORTD = ~WYS_7;
}
if(PORTD & ~WYS_9)
{
PORTD = ~WYS_8;
}
if(PORTD & ~WYS_10)
{
PORTD = ~WYS_9;
}
_delay_ms(80);
while(!(PINC & SW_2)) {}
_delay_ms(80);
}
if(!(PINC & SW_3))
{
if(PORTD & WYS_1)
{
PORTB = TOPTON;
_delay_ms(100);
PORTB = TOPTOFF;
}
if(PORTD & WYS_2)
{
PORTB = TOPTON;
_delay_ms(200);
PORTB = TOPTOFF;
}
if(PORTD & WYS_3)
{
PORTB = TOPTON;
_delay_ms(300);
PORTB = TOPTOFF;
}
if(PORTD & WYS_4)
{
PORTB = TOPTON;
_delay_ms(400);
PORTB = TOPTOFF;
}
if(PORTD & WYS_5)
{
PORTB = TOPTON;
_delay_ms(500);
PORTB = TOPTOFF;
}
if(PORTD & WYS_6)
{
PORTB = TOPTON;
_delay_ms(600);
PORTB = TOPTOFF;
}
if(PORTD & WYS_7)
{
PORTB = TOPTON;
_delay_ms(700);
PORTB = TOPTOFF;
}
if(PORTD & WYS_8)
{
PORTB = TOPTON;
_delay_ms(800);
PORTB = TOPTOFF;
}
if(PORTD & WYS_9)
{
PORTB = TOPTON;
_delay_ms(900);
PORTB = TOPTOFF;
}
if(PORTD & WYS_10)
{
PORTB = TOPTON;
_delay_ms(1000);
PORTB = TOPTOFF;
}
_delay_ms(80);
while(!(PINC & SW_3)) {}
_delay_ms(80);
}
else
{
PORTB = TOPTOFF;
}
}
}Problem polega na tym że gdy odpalam program wyświetlacz jest czysty, gdy nacisne '+' pokazuje sie '1' i dźwiek, gdzy ponownie nacise '+' tylko dźwięk na wyświetlaczu zostaje '1'.
Gdy nacisne '-' na wyswietlaczu pokazuje się '8' i dżwięk, gdy ponownie nacisne '-' jest tylko dźwięk a na wyświetlaczu zostaje '8'
Gdy wcisne pedal nożny na na '1' lub na '8' to i tak czas świeceia testowej diody Led jest dłuższy niż przewidywany...
prosze o pomoc, podpowiedzi, naprowadzenia lub konkretne przykłady z góry dziękuje pawelek1990
PS
tu jeszcze foto całośći na płytce stykowej:
