loetstelle.net
Lötstelle Userforum
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Warum funktioniert dieser einfache code nicht?
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Mikrocontroller
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
fishkowhow



Anmeldungsdatum: 10.02.2008
Beiträge: 107

BeitragVerfasst am: Sa 03.Dez 2011 22:12:04    Titel: Warum funktioniert dieser einfache code nicht? Bauteile finden Antworten mit Zitat

Hey,

Ich bin am Atmel programmieren mit C. Nun habe ich mir ein kleines Programm geschrieben, nur wenn taster T1 gedrückt wird läuft eine kleine Blinkschleife ab.

hier erstmal der code:
Code:

#include <avr/io.h>
#include <stdio.h>
#include <util/delay.h>

int main(void)
{

DDRD &=~ _BV(PD2);         //Taster T1= input
DDRD |= _BV(PD5);         //LED 1= output

while(1){
   
   if((PIND & (1<<PIND2)) == 1)
   {
   PORTD |= (1<<PD5);
      _delay_ms(400);
      PORTD &= ~(1<<PD5);
      _delay_ms(50);   
      
   }
   else
   {
   
   PORTD &= ~(1<<PD5);   
   }
}
   return 0;
}


Es ist nun so, dass das programm in diesem zustand auf dem µC keine Funktion zeigt. tausche ich die inhalte der IF und else- ausgaben und gebe oben bei der If-bedingung == 0 ein, funktioniert das Programm. Warum funktioniert es mit dem == 1 Nicht? bzw was kann ich tun, um nicht immer "querdenken" zu müssen?

MfG
Michael Very Happy
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Alv



Anmeldungsdatum: 23.06.2009
Beiträge: 1145
Wohnort: Braunschweig

BeitragVerfasst am: So 04.Dez 2011 05:53:09    Titel: Re: Warum funktioniert dieser einfache code nicht? Bauteile finden Antworten mit Zitat

Ohne jetzt Ahnung von C zu haben:
Wie ist denn der Taster angeschlossen? Liefert er im gedrückten Zustand eine "0" oder eine "1"?

_________________
bd. Alv


Zuletzt bearbeitet von Alv am So 04.Dez 2011 15:29:06, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
BellaD



Anmeldungsdatum: 03.12.2006
Beiträge: 1708
Wohnort: Klinik der misshandelten Kuscheltiere

BeitragVerfasst am: So 04.Dez 2011 15:19:47    Titel: Bauteile finden Antworten mit Zitat

moin


1.
vor dem include der delay.h sicherstellen das die cpu-frequenz definiert wurde (im makefile ) oder besser so:

Code:

#ifndef F_CPU
#define F_CPU 4000000UL     /* Quarz mit 4 Mhz */
#endif
#include <util/delay.h>


2.
warum benutzt du _BV und (1<< xxx) entscheide dich für eine Schreibweise Wink . _BV ist nur ein _macro und sollte der Lesbarkeit dienen, tut es aber nur wenn man sich für eine Sache entscheidet,die meisten Tut's sind bei (1<<xxx) geblieben weils halt Standard ist....


3.
Code:

//aufrufen, wenn Bit 0 gelöscht (0) ist
if ( !( PINB & 0x01 ) ) {
  // mein code ......
}
// oder ::
if (!(PINB & (1<<PINB0))) 



4.
Es gibt ein schönes Tut : http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

_________________
Eine Weiterverbreitung ohne ausdrückliche Genehmigung ist untersagt. Für Schäden, lehnen wir jegliche Haftung ab.


Zuletzt bearbeitet von BellaD am So 04.Dez 2011 16:50:30, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fishkowhow



Anmeldungsdatum: 10.02.2008
Beiträge: 107

BeitragVerfasst am: So 04.Dez 2011 16:07:11    Titel: Bauteile finden Antworten mit Zitat

Hey,

Das quarz wird bei mir ja in der Makefile definiert.

Keine ahnung, das mit dem (1<<xxx) habe ich mal so gelernt, aber dann werde ich nun ab jetzt immer das (1<<xxx) Verwenden

Die taster sind bei ihrer bedienung +5v, in unberührtem Zustand 0V

MfG
Michi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fishkowhow



Anmeldungsdatum: 10.02.2008
Beiträge: 107

BeitragVerfasst am: Di 06.Dez 2011 16:22:16    Titel: Bauteile finden Antworten mit Zitat

Heyhey


Ich habe versucht das Programm zu scheiben, allerfdings tritt nie die gewünschte Funktion ein, die ich mir eigendlich erhofft hatte.

Kann jemand mal meinen Code im gesamten korrigieren? ich habe das gefühl, ich habe einen fehler in der initalisierung der pins

MfG
Michael
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BellaD



Anmeldungsdatum: 03.12.2006
Beiträge: 1708
Wohnort: Klinik der misshandelten Kuscheltiere

BeitragVerfasst am: Di 06.Dez 2011 17:05:17    Titel: Bauteile finden Antworten mit Zitat

moin moin

Ich benutze AVR-Studio 4 + WinAvr

Code:

// CPU ATmega8 /8Mhz

#define F_CPU 8000000UL

#include <stdlib.h>
#include <avr/io.h>       
#include <util/delay.h>

void init_Device (void)
{
   DDRB  =0b11100000;           //PB7, PB6, PB5 als Ausgang  ,Rest Eingang
   PORTB =0b00000111;           //PullUp-Widerstand an  PB0, PB1, PB2 ein
    
}


int main (void)
{
   init_Device();
   //Modi:      

while(1){
   
         if (!(PINB & (1<<PINB0)))   // PB0
   
         {
         PORTB |= (1<<PB5);
         _delay_ms(400);
         PORTB &= ~(1<<PB5);
         _delay_ms(50);   
     
         }
         else
         {
   
         PORTB &= ~(1<<PB5);   
         }
   }
   return 0;
}       


Die Taster sollten nach masse Schalten und ich benutze die eingebauten Pull_Up Widerstände.
Port musste anpassen.
Getestet in AVRStudio im Simulator Wink
ob das jetzt bei gedrücktem Taster oder andersrum geht ? ist ja auch egal musste halt mal rumprobieren Very Happy

mfg

_________________
Eine Weiterverbreitung ohne ausdrückliche Genehmigung ist untersagt. Für Schäden, lehnen wir jegliche Haftung ab.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fishkowhow



Anmeldungsdatum: 10.02.2008
Beiträge: 107

BeitragVerfasst am: Di 06.Dez 2011 18:40:27    Titel: Bauteile finden Antworten mit Zitat

Heyy,

Okay, der code sieht gut und logisch aus. aber eines gefällt mir nicht: und zwar bei der ein- und ausgangsdefinition. wie kann ich da einzelne pins definieren?( ist zwar mehr schreibaufwand, aber für mich beim programme schreiben oft hilfreich zum "abspicken"

Danke für den code Wink

MfG
Michael
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BellaD



Anmeldungsdatum: 03.12.2006
Beiträge: 1708
Wohnort: Klinik der misshandelten Kuscheltiere

BeitragVerfasst am: Di 06.Dez 2011 20:34:05    Titel: Bauteile finden Antworten mit Zitat

Ich programmiere lieber Assembler als C darum das ini mal in Binärdarstellung Wink
aber da gibt es verschiedene Möglichkeiten

zBsp.

"ADCSRA |= (1<<ADEN)|(1<<ADPS2)|(1<<ADPS1);"

mehr dazu

http://www.mikrocontroller.net/articles/Bitmanipulation

mfg

_________________
Eine Weiterverbreitung ohne ausdrückliche Genehmigung ist untersagt. Für Schäden, lehnen wir jegliche Haftung ab.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fishkowhow



Anmeldungsdatum: 10.02.2008
Beiträge: 107

BeitragVerfasst am: Di 06.Dez 2011 21:06:49    Titel: Bauteile finden Antworten mit Zitat

Heyy,

Ja ich hatte es auch schon mit assembler und basic versucht. letztendlich fiel meine wahl dann eben doch auf c, keine ahnung warum.. der aufbau ist eigendlich am kompliziertesten von allen usw. aber irgendwie komme ich trotzdem noch am besten mit c klar...

MfG
Michi
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hotzenplotz



Anmeldungsdatum: 14.03.2008
Beiträge: 2212
Wohnort: /sda3/home

BeitragVerfasst am: Di 06.Dez 2011 22:09:42    Titel: Bauteile finden Antworten mit Zitat

Sry, dass ich Dir das so vor den Latz knalle, aber Du kennst ja nicht mal die grundlegendsten Grundlagen.

Woher willst Du dann wissen womit Du besser klar kommst ?

_________________
Lasst uns Spass haben...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fishkowhow



Anmeldungsdatum: 10.02.2008
Beiträge: 107

BeitragVerfasst am: Mi 07.Dez 2011 16:43:31    Titel: Bauteile finden Antworten mit Zitat

kannst es mir ja beibringen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fishkowhow



Anmeldungsdatum: 10.02.2008
Beiträge: 107

BeitragVerfasst am: Mi 07.Dez 2011 16:46:35    Titel: Bauteile finden Antworten mit Zitat

jetzt mal hand aufs herz....

Programmiere ich in assembler beschweren sich die leute, die in c schreiben, warum man nicht c schreibt.

Programmiert man in C fangen die Assembler spezialisten an zu maulen.

Letztendlich kann man es nie allen recht machen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hotzenplotz



Anmeldungsdatum: 14.03.2008
Beiträge: 2212
Wohnort: /sda3/home

BeitragVerfasst am: Mi 07.Dez 2011 17:03:16    Titel: Bauteile finden Antworten mit Zitat

Sag'mir einen brauchbaren Grund warum ich das tun sollte.

Zudem wird es nichts bringen, da Du offensichtlich nicht bereit bist zu lernen. Haettest Du Dir u.a. Tutorial zumindest mal angesehen, waere Dein Programm, in der Zeit, laengst fertig.
Mit lernen meine ich, lesen, fragen, verstehen, umseztzen und nicht irgendwelche zusammengeschusterte Uraltcodes per copy n paste in den Compiler haun und dann fragen warum es nicht geht.

Im Uebrigen schreibt man zumindest mal den CPU Typ, Compilerversion und Funktion in den Programmkopf, damit man ueberhaupt mal weiss um was es geht. Nicht jeder µC hat einen PORTB und wenn, heisst es noch lange nicht das man den auch voll benutzen kann.

BellaD hat folgendes geschrieben:

4.
Es gibt ein schönes Tut : http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

_________________
Lasst uns Spass haben...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
fishkowhow



Anmeldungsdatum: 10.02.2008
Beiträge: 107

BeitragVerfasst am: Mi 07.Dez 2011 21:56:03    Titel: Bauteile finden Antworten mit Zitat

... da du es ja anscheinend besser kannst :p

egal was ich jetzt sage, es ist sowiso falsch... ich denke mir zu diesem kommentar einfach meinen teil und sage nur: man schreibt sich immer 2x im leben, beim zweiten mal sitze ich am längeren hebel.

Gute nacht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hotzenplotz



Anmeldungsdatum: 14.03.2008
Beiträge: 2212
Wohnort: /sda3/home

BeitragVerfasst am: Mi 07.Dez 2011 22:15:55    Titel: Bauteile finden Antworten mit Zitat

Du hast nichts verstanden. ;o(
_________________
Lasst uns Spass haben...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Anzeige






Verfasst am: Heute 03:59:22    Titel: Bauteile finden

Nach oben
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    loetstelle.net Foren-Übersicht -> Mikrocontroller Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum nicht herunterladen


Powered by phpBB 2.x © 2001, 2002 phpBB Group

Sie sind Besucher Nr. 1222731
©opyright by Markus Vohburger 2005 All Rights reserved