- Akku Tests und Balkonkraftwerk Speicher         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: prob mit sigoverflow beim mega8(gelöst)

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.11.2004
    Beiträge
    365

    prob mit sigoverflow beim mega8(gelöst)

    Anzeige

    Powerstation Test
    hi
    nachdem ich es nach viel hin und her endlichgeschafft habe mit meinem mac avrs zu proggen hab ich auch schon wida ein prob.

    und zwar wollte ich eine led blinken lassen indem ich durch einen timer interrupt den entsprechendenport invertiere.
    den code hab ich aus der dokumentation von diesem (http://www.talentraspel.de/portal/) system.

    bei mir sieht der code so aus:

    Code:
    #include <inttypes.h>                                         // Allgemeine Bibliotheken 
    #include <avr/io.h> 
    #include <avr/interrupt.h> 
    #include <avr/signal.h>
    #include <stdint.h>
    
    signal(sig_overflow0)
    {
    TCNT0=0x00;
    PORTB=~PORTB;
    } 
    
    int main (void)
    {
    DDRB=0xFF;
    PORTB=0x00;
    
    TCCR0=(5<<CS00);
    TCNT0=0x00;
    sbi(TCCR0, TCNT0);
    
    sei();
    
    for(;;){}
    }
    allerdings sagt der compiler immer das:

    Code:
    -------- begin --------
    avr-gcc (GCC) 3.4.3
    Copyright (C) 2004 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    
    
    Compiling: test5.c
    avr-gcc -c -mmcu=atmega8 -I. -gstabs   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test5.lst  -std=gnu99 -Wp,-M,-MP,-MT,test5.o,-MF,.dep/test5.o.d test5.c -o test5.o 
    test5.c:8: warning: return type defaults to `int'
    test5.c:8: warning: function declaration isn't a prototype
    test5.c: In function `signal':
    test5.c:8: warning: type of "sig_overflow0" defaults to "int"
    test5.c: In function `main':
    test5.c:20: warning: implicit declaration of function `sbi'
    test5.c: In function `signal':
    test5.c:11: warning: control reaches end of non-void function
    
    Linking: test5.elf
    avr-gcc -mmcu=atmega8 -I. -gstabs   -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -Wall -Wstrict-prototypes -Wa,-adhlns=test5.o  -std=gnu99 -Wp,-M,-MP,-MT,test5.o,-MF,.dep/test5.elf.d test5.o   --output test5.elf -Wl,-Map=test5.map,--cref    -lm
    test5.o(.text+0x2a): In function `main':
    test5.c:20: undefined reference to `sbi'
    make: *** [test5.elf] Error 1
    kann mir wer sagen wo ich den fehler habe?
    ich such schon den ganzen tag danach und in der forensuche hab ich auch nix gefunden was mir hilft.

    mfg macgyver
    [/code]
    irren ist menschlich
    unmenschen irren trotzdem

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    sbi(TCCR0, TCNT0);
    Was möchtest Du damit bewirken?


    der Compiler sagt Dir hier auch den Fehler:

    test5.c:20: undefined reference to `sbi'
    sbi, ist bei avrgcc soweit ich weiß veraltet, und wird nicht mehr benutzt

    Gruß Sebastian

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.11.2004
    Beiträge
    365
    also soweit ich weis muss man damit das flag zum aktivieren des timer interrupts setzten. ich habe auch schon mal
    TCCR0=1;
    TCNT0=1;

    reingeschrieben aba dann kommt ein anderer kompile error und so stehts auch in der doku also bin ich derzeit etwas verwirrt.

    was muss ich denn jetzt statt sbi reinschreiben?

    mfg
    irren ist menschlich
    unmenschen irren trotzdem

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    also tccr0 ist für den prescaller -> Dattenblatt seite 70
    tcnt0 ist ist counterregister auch seite 70
    und Timsk ist für aktivierung der interrupts zuständig, auch seite 70

    hast Du sonst noch fragen ?

    Gruß Sebastian

  5. #5
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Will er da nicht Uppercase ?
    signal(sig_overflow0) --> SIGNAL(SIG_OVERFLOW0)
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    Will er da nicht Uppercase ?
    Das kommt noch dazu

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.11.2004
    Beiträge
    365
    hi
    ich hab den code jetzt verändert. er sieht jetzt so aus:
    Code:
    #include <inttypes.h>                                         // Allgemeine Bibliotheken 
    #include <avr/io.h> 
    #include <avr/interrupt.h> 
    #include <avr/signal.h>
    #include <stdint.h>
    
    signal(SIG_OVERFLOW0)
    {
    TCNT0=200;
    PORTB=~PORTB;
    } 
    
    int main (void)
    {
    DDRB=0xFF;
    PORTB=0x00;
    
    TCCR0=(5<<CS00);
    TCNT0=0x00;
    TIMSK=(1<<TOIE0);
    
    sei();
    
    for(;;){}
    }
    ich bekomme jetzt zwar keinen error mehr aba der interrupt löst einfach nicht aus.
    und aus dem datenblatt werde ich auch nicht so wirklich schlau.
    weis wer wies richtig gehört?

    mfg macgyver
    irren ist menschlich
    unmenschen irren trotzdem

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    aba der interrupt löst einfach nicht aus.
    woher weißt Du das ?

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    01.11.2004
    Beiträge
    365
    weil die leds nicht blinken wie sie es eigentlich sollten.

    mfg
    irren ist menschlich
    unmenschen irren trotzdem

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    52
    Beiträge
    2.236
    sondern? in welchem Takt sollen sie Blinken?
    was für ein Quarz hast Du? Timer0 ist ein 8bit timer, so wie Dein Programm aussieht, wirst Du Dein Blinken nicht sehen, weil Dein Auge etwas zu langsam ist, um da irgendwas wahzunehmen...
    in der Interrupt routine lädst Du 200 in deinen Timer rein, damit draucht er nur 56 Timertakte, zum nächsten Interrupt, kannst Dir ausrechnen, wie schnell Deine LED dann blinkt.....

    Gruß Sebastian

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad