gcc-avr och ATmega48

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

gcc-avr och ATmega48

Inlägg av speakman »

Nu har jag äntligen fått snurr på 48:an. Iallafall programmeringsbiten.
Men problemet fortsätter;

För att göra det VÄLDIGT enkelt kör jag denna kod:

Kod: Markera allt

#define F_CPU 1000000UL // 1MHz

#include <avr/io.h>
#include <avr/delay.h>
#include <avr/wdt.h>

int main(void)
{
        wdt_disable();

        DDRD = 0xFF;
        PORTD = 0xFF;

        while (1)
                wdt_reset();

        return 0;
}
Det som händer är att en lysdiod kopplad till en pinne på PORTD blinkar istället för att lysa!
Har jag glömt något?
Skulle någon vänlig själv vilja hjälpa mig med fuses H, L och E hur dom ska vara satt för att köra på den interna klockan, snabbast möjligt (8MHz?)
Har försökt bläddrat genom databladet lite snabbt, men som ni ser på tiden på detta inlägg så det nog dags att sova lite. :)
Men som sagt, vore skoj om man fick lite hjälp med fuses och eventuellt andra start-grejjer (första gången man kör AVR då!).

Mvh
speakman
Användarvisningsbild
Icecap
Inlägg: 26647
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

När du nu börjar med att stänga av watchdog'en.....varför tusan resetter du den jämt?

Kod: Markera allt

#define F_CPU 1000000UL // 1MHz
#include <avr/io.h>
#include <avr/delay.h>

int main(void)
  {
  wdt_disable(); // Kan jag acceptera
  DDRD = 0xFF; // Tror jag på
  PORTD = 0xFF; // likaså här
  while(1); // Och sen stannar vi här i all evighet
  return 0; // Antar att denna är för att kompilern inte ska gnälla
  }
Jag har märkt att en del CPU har problem med att man resetter watchdog'en för ofta och en del slår på den om man råkar nollställa den så om du inte använder den ska du låta bli den helt och hållet!
Senast redigerad av Icecap 24 juli 2005, 09:23:26, redigerad totalt 1 gång.
Användarvisningsbild
cykze
EF Sponsor
Inlägg: 1539
Blev medlem: 8 april 2004, 10:40:28
Ort: Uppsala

Inlägg av cykze »

Ta bort båda anropen till wdt_*(), för du vill ju inte använda watchdogen.

Sätt L(ow byte) till 0xE2 för att inaktivera CKDIV8. Låt H(igh byte) och E(xtended fuse byte) ha kvar sina standardvärden!

Sedan kan du experimentera med _delay_ms() och lite toggling av bitarna i PORTD för att få något på PortD att blinka. Lägg det i while-loopen.

Glöm inte bort att läsa lite om begränsningarna med _delay_ms() i delay.h och ta en titt här för lite mer info om fördröjjningar.
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Jo, för att verkligen garantera att watchdogen inte resetade processorn. Därför stängde jag både av den (vilket bör stanna räknaren) och sedan resettade den för varje loop (vilket bör nolla räknaren).
Givetvis har jag kört utan dessa, men med samma resultat.

MEN! Jag tror jag kommit på det hela!
Jag hade nämligen plockat bort motståndet mellan utgången och lysdioden (kolla tiden på första inlägget, som sagt!), så nu när jag petade in ett vettigare motstånd än jag provade med första gången, så verkar det lira!
Tydligen resettas processorn om lasten blir för hög på utpinnarna! Smart.. :D

Nu ska jag fortsätta lite! Tack för tipset om fusen förresten! ;)

Mvh
speakman
Användarvisningsbild
erixon
Inlägg: 380
Blev medlem: 27 augusti 2003, 10:21:58

Inlägg av erixon »

låter snarare som dålig avkoppling till μC och brown-out slog till....
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Vilken avkoppling syftade du på? PICar går ju faktiskt å köra en LED utan motstånd, även om det inte är att rekommendera.

Mvh
speakman
Användarvisningsbild
Schnegelwerfer
Inlägg: 1863
Blev medlem: 8 november 2004, 13:46:56

Inlägg av Schnegelwerfer »

Han menade dålig avkoppling till själva PICen.

Om du drar mycket ström på någon utgång, kan ju spänningsmatningen till PICen dippa och brown-out aktiveras.

Har du avkopplat spänningsmatningen till PICen med t.ex. en konding på 100nF?
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

Japp, det har jag faktiskt. Även om det då var en ATmega48. :D

Mvh
speakman
Skriv svar