• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomoc z kodem - Atmega8

VPS Starter Arubacloud
0 głosów
413 wizyt
pytanie zadane 1 lipca 2016 w C i C++ przez Mavimix Dyskutant (8,420 p.)

Wiem, że to niezgodne z regulaminem i, że tak nie powinienem robić, ale dałby ktoś gotowca do ultradźwiękowego czujnika odległości na Atmege8 1MHz? Męczę się nad kodem już chyba miesiąc i nic mi nie działa. To jest mój kod, może ktoś zmodyfikuje, tak, żeby w końcu to zadziałało:

#include <avr/io.h>
#include <stdlib.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <util/atomic.h>
#include <uart.h>
#include "lcd.c"

long double time;
long double distances;

int main(void)
{
	LCD_Ini();

	MCUCR |= (1<<ISC00) | (1<<ISC11);
	GICR |= (1<<INT0) | (1<<INT1);
	sei();

	PORTC |= (1<<PC4);
	_delay_us(10);
	PORTC &= ~(1<<PC4);

		while(1)
		{

		}
}

SIGNAL(SIG_INTERRUPT0)
{
	time++;
	_delay_us(1);
}

SIGNAL(SIG_INTERRUPT1)
{
	distances = (time*34/100)/2;

	char Temp[8];
		sprintf(Temp,"%i", distances);

	while(1)
	{
		LCD_Czysc();
		LCD_ZapiszText(Temp);
		_delay_ms(1000);
	}
}

 

komentarz 1 lipca 2016 przez KubenQPL Maniak (62,820 p.)
Nie dość że o gotowca prosisz to jeszcze zła kategoria, powinno być w Arduino raczej.
komentarz 2 lipca 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Jakby się uprzeć, to on pisze to w C dla AVR, zaraz sprawdzę czy jest do tego jakaś lepsza kategoria.
komentarz 2 lipca 2016 przez adrian17 Ekspert (349,820 p.)

Boczna sprawa - nie wiem skąd to wziąłeś, ale SIGNAL() się nie używa, używa się ISR(). Jest o tym wyraźnie w dokumentacji:

http://www.nongnu.org/avr-libc/user-manual/group__avr__interrupts.html#ga67cd0dea412157775c2f2a3ffe9fb8ff

2 odpowiedzi

0 głosów
odpowiedź 1 lipca 2016 przez Michał Kazula Pasjonat (19,540 p.)

Podaj model czujnika.

Nie ma prawa Ci działać bo dałeś w przerwaniu pętle nieskończoną!

Wywal while(1) z SIGNAL i wrzuć do int main(void)!

 

Tu jest wszystko wyjaśnione - link

komentarz 3 lipca 2016 przez Mavimix Dyskutant (8,420 p.)
Model czujnika to US-015. Napisałem funkcję LCD w przerwaniu, bo mam wrażenie, że wtedy nie dokładnie była zmienna czas inkrementowana.
–1 głos
odpowiedź 1 lipca 2016 przez jpacanowski VIP (101,940 p.)
edycja 1 lipca 2016 przez jpacanowski
        while(1)
        {
 
        }

A jeśli chodzi o takie coś, to kompilator od razu tobie to zoptymalizuje, czyli usunie tą pętle. Użyj volatile.

Zrobiłbym to tak:

volatile int i = 0;
while(true) i++;

W tym wypadku volatile mówi aby kompilator nie usuwał tej pętli (nic nie optymalizował), która nic w sumie nie robi.

komentarz 2 lipca 2016 przez adrian17 Ekspert (349,820 p.)

to kompilator od razu tobie to zoptymalizuje

Kompilator nie ma prawa tego zoptymalizować.

Przykład z GCC x86, gdzie pętla ładnie jest widoczna w asm z -O3: https://godbolt.org/g/XUW8ly

komentarz 3 lipca 2016 przez Mavimix Dyskutant (8,420 p.)
Cały czas nie działa :/

Podobne pytania

0 głosów
1 odpowiedź 482 wizyt
pytanie zadane 4 października 2016 w Mikrokontrolery przez Mavimix Dyskutant (8,420 p.)
–1 głos
2 odpowiedzi 839 wizyt
pytanie zadane 9 lipca 2016 w Mikrokontrolery przez Mavimix Dyskutant (8,420 p.)
0 głosów
1 odpowiedź 471 wizyt
pytanie zadane 9 lipca 2016 w Mikrokontrolery przez Mavimix Dyskutant (8,420 p.)

93,018 zapytań

141,984 odpowiedzi

321,282 komentarzy

62,364 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...