logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8 - Błąd main is a normally non-static function przy kompilacji kodu ADC

polarczn 29 Sty 2014 22:46 1881 13
REKLAMA
  • #1 13237549
    polarczn
    Poziom 16  
    Podczas kompilacji tego "prostego" kodu wyskakuje mi błąd "main is a normally non-static function". Sprawdziłem klamerki, są dobrze zrobione. Jak zapisać obliczanie ADC za pomocą arytmetyki stałopozycyjnej, aby nie trzeba było korzystać z tej funkcji dtostrf?
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 13237663
    mickpr
    Poziom 39  
    polarczn napisał:
    Sprawdziłem klamerki, są dobrze zrobione.
    Sprawdź jeszcze raz. Brak klamerki zamykającej w :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #3 13237718
    polarczn
    Poziom 16  
    Niestety, nadal wyskakują błędy.
  • #4 13237731
    mickpr
    Poziom 39  
    Dalej masz problem z klamerkami

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tak potwornie wygląda twój kod...
    Zobacz - jak może wyglądać:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    To tylko poprawki wizualne - nie wnikałem w treść.
  • #5 13237808
    2rs232
    Poziom 18  
    Includujesz plik źródłowy!
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Zamiast "starych" signal
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    używaj "po nowemu" ISR
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #6 13238688
    polarczn
    Poziom 16  
    Inkludowałem plik HD4470.c, ponieważ bez tego pliku PN nie chciał kompilować tego pliku. W Eclipse kompilowało się bez tego pliku.
    Jak wysłać temperaturę do wyświetlacza nie używając funkcji dtostrf?
  • #7 13239160
    SylwekK
    Poziom 32  
    A na przyszłość przecież możesz sobie komentować klamerki. Ja dla ułatwienia (mimo wcięć) ważniejsze klamerki oznaczam np. } //End while(1) , } //End If "zmienna użyta w warunku".
    To naprawdę pomaga.
  • #8 13239240
    polarczn
    Poziom 16  
    Tylko, że mam problem z wyświetlaniem danych na tym wyświetlaczu. Ze zrozumieniem kodu, a nie z klamerkami.
  • REKLAMA
  • #9 13239292
    mickpr
    Poziom 39  
    polarczn napisał:
    Tylko, że mam problem z wyświetlaniem danych na tym wyświetlaczu. Ze zrozumieniem kodu, a nie z klamerkami.
    Nie obraź się - ale bałagan w klamerkach świadczyć może jedynie, że w kodzie też masz taki bałagan.
    Podajesz fragmenty kodu (zamiast całego projektu). Nie podałeś schematu!
    Mamy bawić się we wróżbiarstwo i zgaduj-zgadule?
    Napisz konkretnie - co nie działa, jaki jest obecnie efekt. Podaj cały kod projektu i schemat.
  • #10 13239362
    polarczn
    Poziom 16  
    Jestem jak w jakiejś matni. Czytam o tych uC kilka dobrych miesięcy, a praktycznie nic nie ruszyłem. Mam płytkę stykową z Atmegą. LM335 podłączony do pinu PC5. Po kompilacji tej funkcji, którą podałem wyświetlają mi się zera. Jak skopiowałem gotowca to pokazywał dobrą temperaturę, ale tak się 0 nauczę.
    Uczę się, próbuje cokolwiek zrobić, ale na razie mam 0 postępy. Jeżeli chodzi o ADC to moje pytanie brzmiało jak pozbyć się tej funkcji dtostrf.
    Teraz mam taki kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Mam timer0. Ustawiłem preskaler 8, procek liczy do 200, przerwanie mam co 8Mhz/(8*200), czyli 0,005 s. Lampki dość dennie się palą tzn. PD1 powinna się zapalić w czasie do 1 sekundy, później PD2 powinna się zapalić PD1 gaśnie, a to wszystko nie jest takie płynne.
    Kombinuje, aby tworzyć funkcje umożliwiające mi wyświetlanie czegoś na tym ekranie. Dlatego chciałem, aby pokazywało mi upływające sekundy, ale to nie działa.
    Książkę Tomasza Francuza mam. Niestety nie mogę jej ogarnąć. Na przykład tam gdzie jest napisana obsługa wyświetlacza LED to jest dosłownie kilka linijek dość średnio wytłumaczonych, skomplikowanie napisanych, że tak powiem.
  • #11 13239380
    mickpr
    Poziom 39  
    Krok po kroku. Najpierw naucz się jak wyświetlić na wyświetlaczu jakąś cyferkę, potem ciąg, potem .... temperaturę. Stopniowo...
    Ty zaś chcesz od razu konstruować bombowce strategiczne!.
    Nie od razu Kraków zbudowano.
    Każdy nawet najmądrzejszy mądrala kiedyś również miał
    polarczn napisał:
    0 postępy

    Poczytaj http://mikrokontrolery.blogspot.com , książki Tomasza Francuza i Mirosława Kardasia (kto co woli).
    - Narysuj nam na kartce schemat, zrób zdjęcie,
    - podaj kod projektu (cały)
    - podaj co ma robić
    - podaj czego nie robi, albo co robi źle.
    pomożemy (prawda Panowie?).
  • REKLAMA
  • #12 13239389
    dondu
    Moderator na urlopie...
    polarczn napisał:
    Jestem jak w jakiejś matni. Czytam o tych uC kilka dobrych miesięcy, a praktycznie nic nie ruszyłem. Mam płytkę stykową z Atmegą. LM335 podłączony do pinu PC5. Po kompilacji tej funkcji, którą podałem wyświetlają mi się zera. Jak skopiowałem gotowca to pokazywał dobrą temperaturę, ale tak się 0 nauczę.
    Uczę się, próbuje cokolwiek zrobić, ale na razie mam 0 postępy.

    Twój problem wynika z tego, że już jesteś przy przerwaniach, a jeszcze nie potrafisz wyświetlić na wyświetlaczu liczby zmiennoprzecinkowej. Aby sobie z tym poradzić, uprość program do niezbędnego minimum zostawiając tylko bibliotekę wyświetlacza i zdefiniuj sobie zmienną przypisz jej wartość i spróbuj ją wyświetlić na wyświetlaczu.

    Rozumiem, że tekst już potrafisz wyświetlić?
    Jeśli nie to od tego zacznij.

    Innymi słowy ... małymi kroczkami do przodu :)


    EDIT:
    Tutaj możesz zobaczyć przykład dla sprintf(): http://mikrokontrolery.blogspot.com/2011/03/adc-prezentacja-wyniku-na-lcd.html
    a tutaj poznać jak ją wykorzystywać na bazie rodziny printf(): http://mikrokontrolery.blogspot.com/2011/02/printf-instrukcja-rodzina.html
  • #13 13239858
    BlueDraco
    Specjalista - Mikrokontrolery
    Zwróć uwagę, że taki zapis:
    PORTD^=(1<<PD2);

    powoduje zmianę stanu diody za każdym razem, gdy warunek jest spełniony. A ponieważ w warunkach masz >, a nie ==, w każdym kolejnym przerwaniu zmieniasz stan diody, co widać jako niezbyt jasne świecenie.
  • #14 13240029
    polarczn
    Poziom 16  
    Uff. Ogarnąłem schemat mojego układu. Na reszcie coś do przodu. Nie uwzględniłem na układzie jedynie LM335 (nie mogłem znaleźć) i RS podłączonego do PB6 oraz E podłączonego do PB7 (nie chciałem zamazywać układu).
    W swoim układzie nie będę stosować zewnętrznego kwarcu, szkoda mi 2 pinów. Zamierzam uwolnić jeszcze 1 port ADC, aby podłączyć do układu 2 czujnik.
    Jak wysyłać do wyświetlacza cyfry, które obliczę sobie z liczby przerwań. Wiem, że 50 przerwań daje 2 sekundy. Wiem, że muszę te liczby zmienić na kod ASCI i dopiero to wysłać. Tylko jak to zrobić?
REKLAMA