Kani-Coaching (C lernen mit Nomis)

Habe 4 Taster gefunden und zwei von dem andern Projekt.
Taster:
10k Widerstand vom Pin zu +5V. Vom Pin zum Taster und vom Taster zu Minus. (Active low, richig?)

Led geht von +5V => Widerstand =>Pin

Taster von PB0-PB5 und LEDs von PD0-PD5.

http://img6.imageshack.us/gal.php?g=img0187soo.jpg

Code:
#include <avr/io.h>

int main (void)
{
    DDRD = 0b00000000;
    PORTD = 0b00000000;
    
    //Variablen definieren
    
    

    while(1)
    {

    }
return 0;
}
Jetzt müssten die LEDs leuchten richtig? Geht nicht...

EDIT:
Jetzt verstehe ich garnichts mehr.
The DDxn bit in the DDRx Register selects the direction of this pin. If DDxn is written
logic one, Pxn is configured as an output pin. If DDxn is written logic zero, Pxn is configured
as an input pin.
Code:
int main (void)
{
    DDRD = 0b11111111;
    PORTD = 0b00000000;
Meine LEDs gehen doch von Plus nach Minus. Also muss es ein Eingang sein, damit der Strom da rein kann oder nicht?
Wieso leuchten die LEDs dann, wenn ich die Pins auf Ausgang stellen? Dann geht der Strom doch in Sperrichtung durch die LED o_O Und Wechselstrom ist es ja auch net...
 
Nomis? Erschlag mich bitte nicht. XD
Ich hab das mal so gemacht, so sollte es doch funktionieren oder?
Code:
#include <avr/io.h>



int main (void)
{
    DDRD = 0b11111111;        //LEDs auf Ausgang
    PORTD = 0b11111111;        //LEDs aus

    DDRB = 0b11111111;        //Taster auf Eingang
    PORTB = 0b00000000;        
    
    //Variablen definieren
    
    

    while(1)
    {
        if( PINB &(1<<PB0))        //Wenn an PB0 "high" ist
        {
            PORTD &= ~(1 << PD0);    //LED an
        }
    }
return 0;
}
 
Hallo Kani,

schau dir einmal Zeile 10 und 11 an.
Du hast den gesamten Port als Ausgang und die IO-Pins auf low geschaltet.

Gruß,
Dirk


CodeBox C
#include <avr/io.h>



int main (void)
{
DDRD = 0b11111111; //LEDs auf Ausgang
PORTD = 0b11111111; //LEDs aus

DDRB = 0b11111111; //Taster auf Eingang
PORTB = 0b00000000;

//Variablen definieren



while(1)
{
if( PINB &(1<<PB0)) //Wenn an PB0 "high" ist
{
PORTD &= ~(1 << PD0); //LED an
}
}
return 0;
}
 


CodeBox C

#include <avr/io.h>

int main (void)
{
DDRD = 0b11111111; //LEDs auf Ausgang
PORTD = 0b11111111; //LEDs aus

DDRB = 0b00000000; //Taster auf Eingang
PORTB = 0b00000000; //Int. Pullups deaktivieren (Habe externe)

//Variablen definieren



while(1)
{
PORTD = PINB;
}
return 0;
}
 
Na war das denn so schwer?(Hab Kani im Chat ein paar kleine Anstöße gegeben, aber ihm die Lösung nicht verraten TSE kann es bezeugen.)
Kanis neue Aufgabe ist, eine Flankenabfrage für einen Taster zu machen un damit eine LED zu toggeln.
 
Hi Kani ,

Meine LEDs gehen doch von Plus nach Minus. Also muss es ein Eingang sein, damit der Strom da rein kann oder nicht?
Wieso leuchten die LEDs dann, wenn ich die Pins auf Ausgang stellen? Dann geht der Strom doch in Sperrichtung durch die LED o_O Und Wechselstrom ist es ja auch net...
immer noch ein Verständnisproblem ;)
Eingang und Ausgang sind die DATENRICHTUNG und NICHT die Stromrichtung.

Einen Eingang kannst Du abfragen ob da ne 1 (High, +5V) oder ne 0 (Low, GND) anliegen.

Einen Ausgang kannst du mit einer 1 auf High/+5V schalten (das gibt der dann raus), oder
mit einer 0 auf Low/GND.

Ein Ausgang schaltet also mit einem Transistor entweder nach +5V oder GND durch
und ein Eingang hat sozusagen die Basis eines Transistors am Pin liegen.

Verstanden ?

Gruß
Dino
 
Das weiß er schon. Ich hab den Kani im Chat solange auf mein Tutorial hingewiesen bis er es kapiert hat.(Da hab ich nämlich einen kleinen Teil mit der Problemstellung drangepackt)
 
Hi Nomis,

Ich hab den Kani im Chat solange auf mein Tutorial hingewiesen bis er es kapiert hat.(Da hab ich nämlich einen kleinen Teil mit der Problemstellung drangepackt)
Die Skizzen sehen nicht schlecht aus. In der oberen hast du die PINA.0 und
PINA.1 drin weil man dadurch immer noch den Port parallel abfragen kann
(nehme ich mal so an). Sieht alles absolut Anfängertauglich aus :D
Dann könnte ich mir ja meine FAQ mit den Beschreibungen der Ports
eigentlich sparen :rolleyes: Oder ich mache es auf etwas höherem
technischen Niveau. Mal sehen ...

Gruß
Dino
 
Ich habe nochmal drüber nachgedacht. Eigentlich macht das hier wenig Sinn.
Wenn ich keine Fragen stellen darf (-bzw. nicht kann, weil ich sonst eine doofe Antwort bekomme und das nervt) bringt das nichts. Da kann ich mir auch meine Aufgaben selber stellen und so lange probieren wie es geht.
 
Hi Kani,

Ich habe nochmal drüber nachgedacht. Eigentlich macht das hier wenig Sinn.
warum soll das keinen Sinn machen ? Eine zeitlang selber über ein Problem brüten macht
zwar Sinn, aber wenn man nicht weiter kommt, dann sollte man sich nicht zieren, auch
mal andere zu fragen. Das behütet einen vor Frust und das man alles in die Ecke feuert.

Wenn ich keine Fragen stellen darf (-bzw. nicht kann, weil ich sonst eine doofe Antwort bekomme und das nervt) bringt das nichts. Da kann ich mir auch meine Aufgaben selber stellen und so lange probieren wie es geht.
DAS macht keinen Sinn. Warum bis zum erbrechen über Probleme brüten und am Ende
entnervt und deprimiert alles in die Ecke schmeißen, nur weil man keinen Fragen will ?
Das ganze Mißverständnis ist im großen und Ganzen aufgekommen, weil uns nicht klar
war, das du noch Verständnisprobleme mit der Portkonfiguration hast.

Wenn Du irgendwo Probleme hast, es zu verstehen dann sag es ! Wir können es nicht
riechen. Wenn Du es nicht sagst, nehmen wir natürlich an das Du es verstanden hast.
Man packt sich dann bei dem Quellcode von Dir an den Kopf und fragt sich was dich
da bei den Zeilen geritten hat. So etwas führt dann meißtens dazu das alles hochkocht
und die Emotionen mit den Leuten durchgehen.

So ... ich hoffe mal Du bist jetzt nicht ganz am Boden zerstört und redest noch mit uns :kiss3:
Also nicht unterkriegen lassen ...

Gruß
Dino
 
Gut...danke....tschüss =)
Wenn hinter meinem Rücken über mich geredet wird (negativ) dann habe ich hier eh nichts mehr verloren.
 
Da ich eh nur dumme Antworten bekomme, kann ich auf das Fragen verzichten....1. Hauptgrund, wieso ich auch keine Lust mehr auf diese Schei** habe.

Aber zu der Lösung:


CodeBox C

#include <avr/io.h>

int main (void)
{
DDRD = 0b11111111; //LEDs auf Ausgang
PORTD = 0b11111111; //LEDs aus

DDRB = 0b00000000; //Taster auf Eingang
PORTB = 0b00000000; //Int. Pullups deaktivieren (Habe externe)

//Variablen definieren

static unsigned char zustand_taster1;
char rw_taster1 = 0;

if(zustand == 0 && !(PINB & (1<<PB0))) //Taster wird gedrueckt (steigende Flanke)
{
zustand_taster1 = 1;
rw_taster1 = 1;
}
else if (zustand == 1 && !(PINB & (1<<PB0))) //Taster wird gehalten
{
zustand_taster1 = 2;
rw_taster1 = 2;
}
else if (zustand == 2 && (PINB & (1<<PB0))) //Taster wird losgelassen (fallende Flanke)
{
zustand_taster1 = 3;
rw_taster1 = 3;
}
else if (zustand == 3 && (PINB & (1<<PB0))) //Taster losgelassen
{
zustand_taster1 = 0;
rw_taster1 = 4;
}

return 0;
}

rw_taster1 = 1 Steigende Flanke
rw_taster2 = 2 Taster gedrückt
rw_taster3 = 3 Fallende Flanke
rw_taster4 = 4 Taster losgelassen
Tun wenn steigende Flanke



CodeBox C
if(rw_taster1 == 1)
{
aktion wird durchgeführt
}

Allerdings kann man das rw auch weglassen und die Aktionen direkt in die Ifs schreiben.
 
Versuch nicht mich dazu zu bringen mich schuldig zu fühlen. :(

Du bekommst doch eh meist Antworten solange du nicht Fragen stellst die in jedem C-Tutorial beahndelt werden oder jene wie:"Muss ich innerhalb der ersten Tasterabfrage nochmal abfragen ob der Taster im letzten Durchlauf gedrückt war?". Fragen zu Algorithmischen Problemen wollte ich dir nicht beantworten da das deinen Lernprozess nicht gefördert hätte.

Ja! Wir haben hinter deinem Rücken hinter dir darüber diskutiert wie man deinen Verständniss einschätzen muss und wie man darauf reagieren muss damit du das bestmögliche Lernresultat erzielst.

Und: Ja! Als du Zeilen geschrieben hast wie diese:
Code:
    DDRA = 0b00000000;    //LEDs auf Eingang (Anode an VCC)
wurde durchaus Kritik laut, und zwar mit dem Vorwurf dass du weniger Arbeit in deinen Lernprozess reinsteckst als wir. Vor allem da jeder nach deinem ersten Thread dachte dass LEDs und Taster in deinem Verständniss verankert wären.
Wenn ich mich auch wegen dir nicht schuldig fühle, so hast du mich zumindest soweit getrieben mich zu rechtfertigen.:(



Glückwunsch: Du hast einen sauberen und kurzen Algorithmus entwickelt.
 
Naja, ganz meins ist es nicht. Hab ein bisschen gegoogled.
Also, entweder wir fangen von neuen an bzw. machen weiter wie bisher oder ich gehe meine eigenen Wege.
Wie du willst.
 
Dann Danke ich euch mal für die Hilfe und verabschiede mich. Hat teilweise sehr viel Spaß gemacht hier. Aber es ist das beste wenn ich gehe. Vielleicht ließt man sich ja irgendwann nochmal wieder.
 
Hi Kani,

Dann Danke ich euch mal für die Hilfe und verabschiede mich. Hat teilweise sehr viel Spaß gemacht hier. Aber es ist das beste wenn ich gehe. Vielleicht ließt man sich ja irgendwann nochmal wieder.
wenn Du Lust hättest könnte ich Dir Assembler beibringen :) Bei C fehlt mir leider die
Erfahrung um es anderen beizubringen.
Nebeneffekt: Du lernst den inneren Aufbau des Prozessors mal richtig kennen und kommst
dadurch auch in anderen Sprachen besser zurecht.
Ist nur mal so ein Angebot von mir. Dadurch bekommst Du auch mehr Grundlagenwissen.
Das hilft bei der Fehlersuche dann enorm weiter.
Mußt Du aber selber wissen ...

Gruß
Dino
 
Nein....aber Danke. Ich habe jetzt mit C angefangen und damit höre ich auch wieder auf...beschäftige mich grad mit PWM.
 
Hi Kani,

Nein....aber Danke. Ich habe jetzt mit C angefangen und damit höre ich auch wieder auf...beschäftige mich grad mit PWM.
ok. Wenn Du Fragen hast dann melde dich bevor du irgendwas frustriert in die Ecke
semmelst. Notfalls per PM oder sonstwie.

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)