-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 12

Thema: Bascom Programm läuft nicht richtig

  1. #1
    dnggn
    Gast

    Bascom Programm läuft nicht richtig

    Anzeige

    hallo leute,

    mein ansinnen ist es, einen simplen roboter zu bauen, dessen einzige funktion es ist, sich autonom zu bewegen. ich habe vor, zwei IS471f-Sensoren an einen attiny85 anzuschließen. die ports werden allerdings nach meiner auffassung völlig willkürlich geschaltet und nicht dem quelltext entsprechend. könnte den vielleicht mal jemand überfliegen und mir sagen, ob ich einen fehler reingehauen habe? (verdrahtung sollte stimmen, habs mehrmals neu aufgebaut aber selber fehler) der qulltext sollte selbsterklärend sein, da recht simpel:
    Code:
    $regfile = "attiny85.dat"
    $crystal = 1000000
    
    Config Pinb.0 = Input
    Config Pinb.1 = Input
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Output
    Config Portb.5 = Output
    
    
    Do
    
    If Pinb.0 = 1 And Pinb.1 = 1 Then
    Vorwaerts:
       Portb.2 = 1
       Portb.4 = 0
       Portb.3 = 1
       Portb.5 = 0
    Else
    End If
    
    If Pinb.0 = 0 And Pinb.1 = 0 Then
    Rueckwaerts:
       Portb.2 = 0
       Portb.4 = 1
       Portb.3 = 0
       Portb.5 = 1
    Else
    End If
    
    If Pinb.0 = 0 And Pinb.1 = 1 Then
    Rechtsdrehen:
       Portb.2 = 1
       Portb.4 = 0
       Portb.3 = 0
       Portb.5 = 1
    Else
    End If
    
    If Pinb.0 = 1 And Pinb.1 = 0 Then
    Linksdrehen:
       Portb.2 = 0
       Portb.4 = 1
       Portb.3 = 1
       Portb.5 = 0
    Else
    End If
    
    Loop

    vielen dank schon mal im vorraus

    gruß sören
    Geändert von BASTIUniversal (21.09.2011 um 16:41 Uhr)

  2. #2
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Hallo

    Config Pinb.0 = Input
    Config Pinb.1 = Input
    Config Pinb.2 = Output
    Config Pinb.3 = Output
    Config Pinb.4 = Output
    Config Pinb.5 = Output

    btw. gibt es hier auch eine Bascom-Rubrik:
    http://www.roboternetz.de/community/...scom-Compiler)

    Willkommen im RN-Forum.

    Gruß

    mic

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.01.2006
    Beiträge
    4.556
    Zitat Zitat von radbruch Beitrag anzeigen
    Hallo

    Config Pinb.0 = Input
    Config Pinb.1 = Input
    Config Pinb.2 = Output
    Config Pinb.3 = Output
    Config Pinb.4 = Output
    Config Pinb.5 = Output

    btw. gibt es hier auch eine Bascom-Rubrik:
    http://www.roboternetz.de/community/...scom-Compiler)

    Willkommen im RN-Forum.

    Gruß

    mic
    ja,ja Port.x und Pin.x ist leider etwas unglücklich gewählt, ich komme zwar damit klar aber MUSS auch nach Jahren immer vorher Hirn einschalten was denn wo denn wie denn....Da sind mir dann doch die Register eindeutiger beschrieben b.z.w. eindeutiger zu merken. Aber ich bin ja auch langsam senil. In der Regel helfe ich mir damit, Port schaltet pull-Up ein/aus Pin legt die Datenrichtung b.z.w. Lesen/Schreiben fest. Obwohl mit dem ein/aus von Pull-up lasst sich auch (in Grenzen) eine Schaltfunktion "simulieren", was aber kaum im Sinne des Erfinders sein sollte.

    Gruß Richard
    Geändert von Richard (20.09.2011 um 19:47 Uhr)

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    54
    Beiträge
    5.782
    Blog-Einträge
    8
    Aber ich bin ja auch langsam senil.
    Willkommen im Club.

    http://avrhelp.mcselec.com/config_port.htm
    http://avrhelp.mcselec.com/index.html

    (Immerhin kennen wir noch die Regeln für Groß- und Kleinschreibung...)

    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Hallo dnggn,
    beim ATtiny85 ist PB5 der Reset Pin. Hast Du daran gedacht?
    Eigentlich bleibt der Reset bei ISP Programmierung für die Reset Funktion reserviert. Könnte mir bei Deinem Programm vorsellen, das der Tiny dauern resettet.

    Vor kurzem gab es hier einen thread zur Stromaufnahme des IS471. Nicht das hohe Stromspizen auch noch zu Resets führen.

    Gruß
    Searcher
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

  6. #6
    dnggn
    Gast
    danke schon mal für die antworten, aber ganz verstehe ich das nicht ... also nur pinb.0, pinb.1 usw. hat nicht funktioniert, selber fehler. muss ich jetzt beim input immer eine zahl und einen buchstaben eingeben und beim output nur buchstabe? tut mir leid, ich stehe total auf dem schlauch danke für die hilfe

    EDIT: achja und reset pin hab ich jetzt nicht besonders drauf geachtet, heißt das ich kann diesen port gar nicht als solchen benutzen?

  7. #7
    Moderator Robotik Einstein Avatar von Kampi
    Registriert seit
    21.11.2009
    Ort
    Monheim, Nordrhein-Westfalen, Germany
    Alter
    28
    Beiträge
    3.517
    Blog-Einträge
    9
    Was genau meinst du? Ich verstehe die Frage leider nicht so ganz.

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    15.01.2007
    Ort
    Göttingen
    Beiträge
    705
    muss ich jetzt beim input immer eine zahl und einen buchstaben eingeben und beim output nur buchstabe? tut mir leid, ich stehe total auf dem schlauch
    Das mit Config Port und Config Pin ist in der Tat verwirrend.
    Eindeutig geht´s mit dem DDR-Register (DDR = Data Direction Register):

    DDRX.Y = 0 bedeutet: Anschluss X.Y ist ein Eingang
    DDRX.Y = 1 bedeutet: Anschluss X.Y ist ein Ausgang

    Da bei Power-On-Reset alle DDDR-Register den Wert 0 enthalten, sind alle I/O-Anschlüsse zunächst mal Eingänge. Für diese Aufgabe muss man sie nicht konfigurieren, das sind sie ganz von alleine.

    Soll ein Anschluss ein Ausgang werden, muss das entsprechende Bit im DDR-Register auf 1 gesetzt werden. Das kann entweder einzeln geschehen, also z.B.

    DDRB.2 = 1
    DDRB.3 = 1
    DDRB.4 = 1
    DDRB.5 = 1

    oder Du setzt gleich alle 8 Bits des Registers:

    DDRB = &B00111100 ("&B" heißt, dass die folgende Zahl binär ausgeschrieben wird)
    Mit diesem Befehl sind die Anschlüsse B5,B4,B3 und B2 Ausgänge, der Rest sind Eingänge.

    Und wenn Du den PullUp-Widerstand eines Eingangs aktivieren willst, musst Du eine 1 in das entsprechende PORT-Register schreiben. Also für Deine beiden Eingänge also z.B.

    PORTB.0 = 1
    PORTB.1 = 1

    In anderen Worten:
    1. Ob Ein- oder Ausgang, legt das DDR-Register fest.
    2. Ist der Anschluss ein Ausgang, legt das PORT-Register seinen Pegel fest.
    3. Ist er ein Eingang legt das PORT-Register fest, ob der PullUp-Widerstand aktiviert wird.

    Jetzt etwas klarer?

  9. #9
    Allgemein ist das Programm richtig geschrieben.
    Wie Sauerbruch schon schreibt das aktivieren der internen Pullups (ist unten mal bei dein Programm eingebunden)
    Allgemein versteh ich auch nicht warum du ein Attiny verwendest und den Reset aus programmierst.
    Was für ein Programmiergerät verwendest du?
    Überträgst du den Hexcode mit Basom oder mit ein anderes Programm.
    Ich glaube eher das in der Richtung was nicht richtig eingestellt ist und dadurch keine (fehlerhafte) Übertragung erfolgt.

    mfg

    Rick


    $regfile = "attiny85.dat"
    $crystal = 1000000

    Config Pinb.0 = Input
    Portb.0 = 1
    Config Pinb.1 = Input
    Portb.1 = 1
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portb.4 = Output
    Config Portb.5 = Output


    Do

    If Pinb.0 = 1 And Pinb.1 = 1 Then
    Portb.2 = 1
    Portb.4 = 0
    Portb.3 = 1
    Portb.5 = 0
    Else
    End If

    If Pinb.0 = 0 And Pinb.1 = 0 Then
    Portb.2 = 0
    Portb.4 = 1
    Portb.3 = 0
    Portb.5 = 1
    Else
    End If

    If Pinb.0 = 0 And Pinb.1 = 1 Then
    Portb.2 = 1
    Portb.4 = 0
    Portb.3 = 0
    Portb.5 = 1
    Else
    End If

    If Pinb.0 = 1 And Pinb.1 = 0 Then
    Portb.2 = 0
    Portb.4 = 1
    Portb.3 = 1
    Portb.5 = 0
    Else
    End If

    Loop

    End

  10. #10
    Erfahrener Benutzer Roboter Genie Avatar von Searcher
    Registriert seit
    07.06.2009
    Ort
    NRW
    Beiträge
    1.410
    Blog-Einträge
    101
    Zitat Zitat von dnggn Beitrag anzeigen
    EDIT: achja und reset pin hab ich jetzt nicht besonders drauf geachtet, heißt das ich kann diesen port gar nicht als solchen benutzen?
    Ja, Du kannst ihn zunächst mal nicht als "normalen" I/O Portpin benutzen.

    Es gibt folgende Beschreibung zum RESET Pin im Datenblatt:

    Zitat Zitat von ATtiny85 Datenblatt (doc2568)
    RESET: External Reset input is active low and enabled by unprogramming (“1”) the RSTDISBL Fuse. Pullup is activated and output driver and digital input are deactivated when the pin is used as the RESET pin.
    Wenn Du seit Kauf an den Fuses nichts verändert hast ist PB5 also RESET. Die output driver sind deaktiviert. Bedeutet,
    PORTB.5 = 0 oder 1 hat zumindest nach außen keine Wirkung.

    Nun kommt es auf die Deine Beschaltung des PB5 an. Sieht so aus, als wenn dort über die Motorbeschaltung ein GND auf RESET (PB5) kommen könnte und dann der µC resettet.

    Wenn Du also nicht ganz genau weißt, was sich da tut, laß den PB5 frei bzw. verwende ihn nur als RESET

    Schaltplan Deines Aufbaus würde weiterhelfen.

    Gruß
    Searcher
    Geändert von Searcher (22.09.2011 um 11:42 Uhr)
    Hoffentlich liegt das Ziel auch am Weg
    ..................................................................Der Weg zu einigen meiner Konstruktionen

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. AVR-Schaltung läuft nicht richtig
    Von Amri im Forum AVR Hardwarethemen
    Antworten: 2
    Letzter Beitrag: 08.11.2008, 18:31
  2. Antworten: 4
    Letzter Beitrag: 21.07.2008, 16:48
  3. Timer1 Läuft nicht richtig
    Von DeltaEx im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 23.01.2006, 17:19
  4. Antworten: 3
    Letzter Beitrag: 15.08.2005, 17:41
  5. Programm Läuft nicht richtig,hilfen Sie mir mal
    Von janboejle im Forum AVR Hardwarethemen
    Antworten: 4
    Letzter Beitrag: 08.06.2005, 21:49

Berechtigungen

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